Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: Perl variable garbage collection

by rjt (Deacon)
on Jul 31, 2013 at 09:31 UTC ( #1047220=note: print w/replies, xml ) Need Help??

in reply to Perl variable garbage collection

From B::Deparse:

Optimised away statements are rendered as '???'. This includes statements that have a compile-time side-effect

The crux of this is that, yes, Perl does optimize away the statement $w_w_w unless 1;, but it still puts it on your sub's pad (it does even if you don't say $w_w_w anywhere in your sub's code, but it will be undef when it goes out of scope in the enclosing block). But any mention within that anonymous sub will keep the reference count (because anon subs are created at runtime), and prevent GC. Even though the statement itself does nothing, a reference to your AnyEvent object does exist. The '???' you see isn't the whole story. Try to run the deparse'd code if you need confirmation that there is (was) more going on than an optimized-away statement.

Or, for a little introspection, add the following to the body of your cb sub:

use PadWalker qw/peek_my/; use Data::Dump qw/dump/; state $scope_printed = 0; if (not $scope_printed++) { my $my_vars = peek_my(0); while (my ($var, $ref) = each %{ $my_vars }) { printf "%15s => %s\n", $var, dump $ref; } }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1047220]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2018-05-27 05:46 GMT
Find Nodes?
    Voting Booth?