overload behavior on Perl 5.14.2
use strict;
use warnings;
use utf8;
use 5.010000;
{
package Foo;
sub new { bless +{}, shift }
}
my $x = Foo->new();
say($x);
{
eval q!
package Foo;
use overload q{""} => sub { "STRINGIFY" };
!;
die $@ if $@;
}
say($x);
my $y = Foo->new();
say($x);
say($y);
And results are
Foo=HASH(0x1d8ab78)
Foo=HASH(0x1d8ab78)
Foo=HASH(0x1d8ab78)
STRINGIFY
overloaded operators are applied to values create after overload only?
By this bug, JSON::XS have a amazing behavior.
www4071uf% cat hoge.pl
use strict;
use warnings;
use utf8;
use 5.010000;
use JSON::XS;
use JSON ();
warn JSON::XS::true;
warn JSON::true;
www4071uf% perl hoge.pl
1 at hoge.pl line 9.
1 at hoge.pl line 10.
www4071uf% cat foo.pl
use strict;
use warnings;
use utf8;
use 5.010000;
use JSON ();
use JSON::XS;
warn JSON::XS::true;
warn JSON::true;
www4071uf% perl foo.pl
true at foo.pl line 9.
true at foo.pl line 10.
Published: 2012-05-01(Tue) 02:55