{
package Null;
use overload
bool => sub { undef },
'""' => sub { undef },
'0+' => sub { undef },
fallback => 1,
nomethod => 'AUTOLOAD';
sub AUTOLOAD { return; }
}
{
package Foo;
sub new { return bless { a => 'b' }, shift; }
sub apple { 'pear' }
}
my %x = (
foo => Foo->new,
);
my $y = $x{foo};
print "Y1: $y\n";
bless $x{foo}, 'Null';
%{$x{foo}} = ();
print "Y2: $y\n";
my $z = $x{foo};
print "Z: $z\n";
####
Y1: Foo=HASH(0x1801234)
Y2: Null=HASH(0x1801234)
Z:
####
$db->{foo} = { a => 'b' };
my $x = $db->{foo};
my $y = $db->{foo};
ok( $x == $y ); # This is broken in 1.0004 and before, but fixed in SVN.
delete $db->{foo};
is( $x, undef ); # This works
is( $x + 0, 0 ); # This does not