Hi I'm trying to understand variable scope. I'm used to C where a variable created inside a subroutine is on the stack and it disappears when the subroutine returns. However in this perl example, I create a variable inside a subroutine (a hash called %hsh). I then assign the address of this hash to a global variable and then set some values inside this hash. When the subroutine ends, I would expect that the global variable would point to something that has disappeared. However the printout succeeds in printing the correct values from that hash. Why is this. I'm basically concerned that everything I'm creating inside these subroutines is not getting cleaned-up.
my $gptr; a1(); print "v1=" . $gptr->{'v1'} . "\n"; exit(0); sub a1 { my %hsh; $gptr = \%hsh; $gptr->{'v1'} = 10; $gptr->{'v2'} = 20; }

In reply to Do subroutine variables get destroyed? by bt101

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.