Split the boolean class into an outer module

This commit is contained in:
gfx
2010-09-17 13:25:23 +09:00
parent 5e602fb575
commit d2962d8676
5 changed files with 87 additions and 25 deletions

View File

@@ -6,22 +6,21 @@ use 5.008001;
our $VERSION = '0.23';
our $PreferInteger = 0;
{
package
Data::MessagePack::Boolean;
use overload
'bool' => sub { ${ $_[0] } },
'0+' => sub { ${ $_[0] } },
'""' => sub { ${ $_[0] } ? 'true' : 'false' },
fallback => 1,
;
sub true () {
require Data::MessagePack::Boolean;
no warnings 'once', 'redefine';
my $t = $Data::MessagePack::Boolean::true;
*true = sub (){ $t };
return $t;
}
our $true = do { bless \(my $dummy = 1), "Data::MessagePack::Boolean" };
our $false = do { bless \(my $dummy = 0), "Data::MessagePack::Boolean" };
sub true () { $true }
sub false () { $false }
sub false () {
require Data::MessagePack::Boolean;
no warnings 'once', 'redefine';
my $f = $Data::MessagePack::Boolean::false;
*false = sub (){ $f };
return $f;
}
if ( !__PACKAGE__->can('pack') ) { # this idea comes from Text::Xslate
my $backend = $ENV{ PERL_DATA_MESSAGEPACK } || '';

View File

@@ -0,0 +1,14 @@
package Data::MessagePack::Boolean;
use strict;
use overload
'bool' => sub { ${ $_[0] } },
'0+' => sub { ${ $_[0] } },
'""' => sub { ${ $_[0] } ? 'true' : 'false' },
fallback => 1,
;
our $true = do { bless \(my $dummy = 1) };
our $false = do { bless \(my $dummy = 0) };
1;