Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: sub and anonymous sub

by Courage (Parson)
on Jun 20, 2002 at 20:43 UTC ( [id://176150]=note: print w/replies, xml ) Need Help??


in reply to sub and anonymous sub

1. As your program proved, "$depth" variable does not goes away at "#5" because it is used in sub "recurse" (hence REFCNT($depth)++ few times). And it was allocated during compile stage, to perform some optimizations here

2. I'll suggest you to read "perlsub" and not "perlguts", and may be after that reading "perlcall" also will help getting you deeper into your question.

Courage, the Cowardly Dog.
PS. Something fishy is going on there, or my name is Vadim Konovalov. And it's not.

Replies are listed 'Best First'.
Re: Re: sub and anonymous sub
by BrowserUk (Patriarch) on Jun 20, 2002 at 22:50 UTC

    Re: 1) Would it be fair to say that $depth has its ref count increased when the ++$depth is compiled As opposed to when the sub recurse is actually invoked?

    And does this mean that the symbol table entry for $depth will persist for the life of the program (allbeit inaccessible), and never be garbage collected, even if the sub recurse is never invoked?

    Re: 2) It was reading and trying to digest perlsub that raised the question in my mind. I scanned perlcall - its interesting. Hopefully a few more reads and a few more weeks of immersion in Perl, and it will make more sense. I had looked in perlguts, just long enough to know that I am not ready for that yet.

    Thanks.

      I'll answer only to 1st item, because I see 2nd already resolved.

      As best of my understanding, yes, ref count for $depth is increased when "sub recurse" is compiled. And if, say, we compiled anonymous sub as my $r=sub{$depth} and then $r goes away due to refcounting, I see that ref count for $depth will be decreased once (even if $depth was used several times inside that sub).

      Let me note that I just checked "perlsub" and see exactly your question explained at the section "Persistent Private Variables"

      Best wishes,
      Courage, the Cowardly Dog.
      PS. Something fishy is going on there, or my name is Vadim Konovalov. And it's not.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-03-29 07:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found