Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

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; } }


Comment on Re: Perl variable garbage collection
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1047220]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2014-09-16 20:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (48 votes), past polls