if (my $object = Foo->new) {} print "after if\n"; package Foo; sub new { my $self = bless {},shift; print "CREATED $self\n"; $self } sub DESTROY { print "DESTROYED $_[0]\n" } #### CREATED Foo=HASH(0xfc65c) after if DESTROYED Foo=HASH(0xfc65c) #### CREATED Foo=HASH(0xfc65c) DESTROYED Foo=HASH(0xfc65c) after if #### use Internals qw(SetRefCount); if (my $object = Foo->new) { SetRefCount( $object,1 ) } print "after if\n"; package Foo; sub new { my $self = bless {},shift; print "CREATED $self\n"; $self } sub DESTROY { print "DESTROYED $_[0]\n" } __END__ CREATED Foo=HASH(0xfc65c) DESTROYED Foo=HASH(0xfc65c) after if Attempt to free unreferenced scalar: SV 0xfc65c. #### { if (my $object = Foo->new) { } } print "after if\n"; package Foo; sub new { my $self = bless {},shift; print "CREATED $self\n"; $self } sub DESTROY { print "DESTROYED $_[0]\n" } __END__ CREATED Foo=HASH(0xfc65c) DESTROYED Foo=HASH(0xfc65c) after if