The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package BSON::String;

use strict;
use warnings;

use overload '""' => \&value;

sub new {
    my ( $class, $value ) = @_;
    bless { value => $value }, $class;
}

sub value {
    return $_[0]->{value};
}

1;

__END__

=head1 NAME

BSON::String - String data for BSON

=head1 SYNOPSIS

    use BSON 'encode';

    my $str1 = BSON::String->new('Jack Reacher');
    my $str2 = BSON::String->new('55');
    my $str3 = BSON::String->new('-1234.7654');

    my $bson = encode( { a => $str1, b => $str2, c => $str3 } );


=head1 DESCRIPTION

Since Perl does not distinguish between numbers and strings, this module 
is provides an explicit string type for L<BSON>'s string element.
It's very simple and does not implement any operator overloading other 
than C<"">.

=head1 METHODS

=head2 new

Main constructor which takes a single parameter - the string.

    my $string = BSON::String->new('Hello, there!');
    print "$string\n";    # Prints 'Hello, there!'
    if ( "$string" gt "abcde" ) {

        # This will work
        ...;
    }

=head2 value

Returns the value of the string.

=head1 OVERLOAD

Only the C<""> operator is overloaded. You won't be able to perform string
comparison on a BSON::String instance.

=head1 SEE ALSO

L<BSON>

=head1 AUTHOR

minimalist, C<< <minimalist at lavabit.com> >>

=head1 BUGS

Bug reports and patches are welcome. Reports which include a failing 
Test::More style test are helpful and will receive priority.

=head1 LICENSE AND COPYRIGHT

Copyright 2011 minimalist.

This program is free software; you can redistribute it and/or modify 
it under the terms as perl itself.

=cut