Because you never call the sub that contains
the Scope::Guard;
Try:
use strict;
use Scope::Guard;
my $x;
my $code = do {
my $g;
my $s=sub { $g = Scope::Guard->new( sub { warn "destroyed"; $x ;
+} ) };
$s->();
};
$code->();
$code=undef;
warn "end";
----
Not a CODE reference at /tmp/pt1 line 11.
destroyed at /tmp/pt1 line 7 during global destruction.
You are also creating a sub that references a 'global' ($x) that won't go out of scope until BOTH the global is 'done' and until the anonymous sub (with a reference in Scope::Guard, presumably), goes out of scope -- and it may not destroy it's reference
until the program has exited (i.e. it may be in an allocated hash, once the allocated hash has been
destroyed, the 'sub' goes away, and then the '$x' goes away, and everyone is destroyed...
AAiieee....
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.