in reply to Can I safely return a reference from a subroutine?

No, that's not correct. If you pass back a reference, the original data structure won't be destroyed, even though you've left the subroutine.

This is because of the way Perl's garbage collection is implemented: it uses reference counting, which means that as long as there's a reference to a particular piece of data, that data won't be destroyed. Once the reference count drops to 0, the original data will be garbage collected.

When you return a reference, the original reference to the data (the one created in the sub) goes away, but you grab a new reference to the data. So the reference count doesn't fall to 0, so the data isn't destroyed until your new reference goes away.

Does this make sense? Look in perlref for more details on references.

  • Comment on Re: Can I safely return a reference from a subroutine?