in reply to Re: Do subroutine variables get destroyed?
in thread Do subroutine variables get destroyed?

Thanks everyone, those are great answers. I gather that if the reference variable is pointed to a new item, then the old item to which it pointed no longer has any references to it and it will be destroyed.
  • Comment on Re^2: Do subroutine variables get destroyed?

Replies are listed 'Best First'.
Re^3: Do subroutine variables get destroyed?
by AnomalousMonk (Archbishop) on May 08, 2016 at 16:08 UTC
    ... if the reference variable is pointed to a new item, then the old item to which it pointed no longer has any references to it and it will be destroyed.

    An unreferenced referent (i.e., one having a ref count of 0) will be marked for garbage collection and will eventually be destroyed.


    Give a man a fish:  <%-{-{-{-<

Re^3: Do subroutine variables get destroyed?
by Marshall (Canon) on May 09, 2016 at 22:10 UTC
    Yes, that is correct.

    Consider what happens with my re-coded sub a1,

    my $href = a1(); $href = a1();
    The first call makes a hash and returns a reference to it. The second call also makes a hash and returns a reference to it. However after the second call, the reference to the first hash is now "lost" as it was replaced by a reference to the second hash that was generated. The memory for the first hash is then recylced because its reference count is zero and there is no way for the program to access that data anymore.

    Of course in a "real" example, probably there are some parameters to sub a1 so that it generates a different kind of hash on the second call. One reason to do this might be in a GUI interface where a1() winds up being say a "button factory". If the references returned are kept in scope, say in an array, then each button is a distinct thing.

    For the most part, Perl memory management does the "right thing" under the covers and is transparent to you. There are of course special considerations with certain types of data structures and when making truly huge structures in the sub.