Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??
This little program produces a result that was at least unexpected by me and a few other Amsterdam Perl Mongers:
use strict; use warnings; sub Foo::DESTROY{ print "object $_[0]->[0] destroyed\n"; } my $foo = bless [ 'foo' ], 'Foo'; # notice 'my' our $bar = bless [ 'bar' ], 'Foo'; # notice 'our' END { print "END block executed\n"; }
produces:
object foo destroyed END block executed object bar destroyed
What I expected was:
END block executed object foo destroyed object bar destroyed
In other words, any objects tied to file lexicals would be destroyed at global destruction *after* the execution of the END block. But apparently, they are destroyed *before* the END block executes. This seems at least the case with 5.8.1, 5.8.5, 5.8.8. and 5.10.0.

Is this behaviour documented anywhere? If not, where would be a good place to document this (as it cost me a few days wallclock to figure this one out and many people that I've asked their expectation about this piece of code, have given the wrong answer).

The reason I'm asking, is that I'm working on some leak detection utility. In this code example, I would consider both $foo as well as $bar as having leaked, as they were not reclaimed before the program ended. Having $foo being DESTROYed *before* the END block executes, just makes things so much more complicated... ;-(

Suggestions? Comments?

Liz


In reply to Global destruction feature / bug ? by liz

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • 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, 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, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • Outside of code tags, you may need to use entities for some characters:
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others taking refuge in the Monastery: (4)
    As of 2014-08-23 21:24 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      The best computer themed movie is:











      Results (178 votes), past polls