Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^3: Do subroutine variables get destroyed?

by Marshall (Canon)
on May 09, 2016 at 22:10 UTC ( [id://1162578]=note: print w/replies, xml ) Need Help??


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

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.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1162578]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2024-04-23 15:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found