laziness, impatience, and hubris PerlMonks

### Re: 'my' Variable life cycle

by gamache (Friar)
 on Mar 07, 2008 at 15:24 UTC Need Help??

in reply to 'my' Variable life cycle

As long as at least one reference to a variable exists, the variable will not be garbage-collected. So in this example:
```sub foo { my @x = qw(a b c); return \@x }
my \$f = foo();
...@x's contents remain, and \$f now holds a reference to @x, such that \$f->[0] eq 'a'. But here:
```sub foo { my @x = qw(a b c); return \@x }
foo();
...@x can be garbage-collected as normal, since the reference to @x gets dropped on the floor.

Replies are listed 'Best First'.
Re^2: 'my' Variable life cycle
by ikegami (Patriarch) on Mar 09, 2008 at 04:21 UTC

The following shows the memory being re-used.

```sub func1 { my \$x; print(\\$x, "\n"); return \\$x }
sub func2 { my \$x; print(\\$x, "\n"); return }

push @a, func1() for 1..5; print("\n");
func1() for 1..5; print("\n");
func2() for 1..5; print("\n");
```SCALAR(0x226d1c)
SCALAR(0x225ffc)
SCALAR(0x226cb0)
SCALAR(0x1830a6c)
SCALAR(0x1830a84)

SCALAR(0x1830a9c)
SCALAR(0x1830ab4)
SCALAR(0x1830a9c)
SCALAR(0x1830ab4)
SCALAR(0x1830a9c)

SCALAR(0x1830910)
SCALAR(0x1830910)
SCALAR(0x1830910)
SCALAR(0x1830910)
SCALAR(0x1830910)

Note that the implementation of lexicals actually differs a lot from your description, but your post is an accurate description of how lexicals should be perceived to work.

Re^2: 'my' Variable life cycle
by Anonymous Monk on Mar 07, 2008 at 15:30 UTC
So that I need to clean the large list and hash by myslef before I exit the function in order to release the memory?

If you don't return that variable somehow from the function, Perl will reclaim the memory when the function returns. If you do return that variable somehow from the function, you probably don't want to release its memory.

No, if you want a variable's memory to be released when the function exits, you need to not return a reference to that variable.

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://672797]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (2)
As of 2024-03-03 16:44 GMT
Voting Booth?
My favourite way to spend a leap day ...

Results (29 votes). Check out past polls.