http://qs321.pair.com?node_id=819008


in reply to Re: No DESTROY object.
in thread No DESTROY object.

There are 2 problems with your argument that jump out at me.
  1. first - DESTROY should still get called even if only once.
  2. second sub { $bob } does not get DESTROYed either and it certainly not immutable.
package Foo; sub print { print "@_\n"; } sub DESTROY { print "@_ DESTROY\n"; } our $bob = "x\n"; my $x = bless(sub {$bob}, 'Foo'); $x->print('$bob'); print $x->(); $bob = "y\n"; print $x->(); $bob = undef; __END__ Foo=CODE(0xe8a278) $bob x y
-- gam3
A picture is worth a thousand words, but takes 200K.

Replies are listed 'Best First'.
Re^3: No DESTROY object.
by ambrus (Abbot) on Jan 22, 2010 at 17:22 UTC

    For your second question, if you replace our $bob to my $bob, then the DESTROY does get called. This way, perl knows that $bob is a global so it optimizes the sub constructor to a constant again.