in reply to Re^2: Lost anonymous subs
in thread Lost anonymous subs

This is all perl internals, perlguts stuff. The CV you get in $code has an ->OUTSIDE C pointer to the PADLIST that @arr lives in and then the compiled code has a note on which index in that PADLIST it is suppposed to access the @arr at. So it isn't a copy. The code in $code works with the real, original @arr, not a copy.

Replies are listed 'Best First'.
Re^4: Lost anonymous subs
by kappa (Chaplain) on Dec 09, 2004 at 15:49 UTC
    Please, say that the comments down there in the code are right and I will rest calm, thankful and a bit more knowledgable :)
    my $code; { my @arr = (9) x 1000_000; $code = sub { @arr }; } # here @arr got out of the scope but is not freed as # there's a ref from inside $code closure # which enables $code do things with the array when called undef $code; # only now that million of nines has gone away # it always existed in exactly one copy
    --kap

      Your comments were unintelligble

      Here is what happens. Your million nines will continue to stick around as long as $code does. Once you lose the last link to $code then your million nines will also be gone.

        Looked intelligible to me. And the comments agree with what you say.