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. |