In your example, the hash references and the original array reference are all freed when when the last line is executed. If any part of the structure contained objects, that's when their DESTROY methods would be called.

Perl uses reference counting to determine when to free memory, so you mostly don't have to worry about it unless you've created a circular reference. For example:

my $ar = []; push @{$ar}, $ar; # $ar can only be destroyed manually.

In that case, you'd have to walk around your structure and undef the relevant references manually. Another way to handle this is with weaken in Scalar::Util. weaken makes a reference "weak" so that it doesn't count toward the reference count. With that, you can make your circular references weak, and destruction will happen normally. Note that a copy of a weak reference is not weak.

use Scalar::Util qw( weaken is_weak ); my $ar = []; push @{ $ar }, weaken $ar; # $ar will be destroyed normally. if ( is_weak $ar->[0] ) { print "First list item is weak\n"; } my $copy = $ar->[0]; if ( ! is_weak $copy ) { print "copy is not weak\n"; }

Finally, you asked about real memory being freed in a mod_perl environment. When perl releases some data structure, it doesn't necessarily return that memory to the OS. It will keep it and use it again when another data structure wants it.


In reply to Re: deleteing references by kyle
in thread deleteing references by jshin

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!
  • 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:
    & &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.