|Problems? Is your data what you think it is?|
Lexicals in if() scope gotcha!by liz (Monsignor)
|on Mar 30, 2004 at 23:32 UTC||Need Help??|
This came up on perl5-porters this week:
The question is, when does the object get destroyed given this code?
Well, contrary to expectation (well, at least mine), the object does not get destroyed until global destruction! As the following output shows:
instead of the expected:
It appears that this behaviour is intentional and goes back until at least 5.00504. It is caused by the fact that any lexical inside an if() gets a refcount of 2, rather than of 1.
If this really is a problem for you, then there is the Internals module which allows you to set the refcount of a variable from Perl.
Note that the object now is destroyed at the end of the if(), but that we get a warning at global destruction as a bonus.
Of course, there is a much simpler method: just add an extra scope!
Hope this maybe helpful for someone someday.