{ 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