Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: •Re: sub and anonymous sub

by BrowserUk (Pope)
on Jun 20, 2002 at 21:32 UTC ( #176164=note: print w/ replies, xml ) Need Help??


in reply to •Re: sub and anonymous sub
in thread sub and anonymous sub

Thanks Merlyn, "scarier" is just what I needed:)

In your example, wouldn't $my_sub_level need to have been declared previously in order to have something to localise?

From perlsub A local just gives temporary values to global (meaning package) variables. It does not create a local variable.


Comment on Re: •Re: sub and anonymous sub
•Re: Re: •Re: sub and anonymous sub
by merlyn (Sage) on Jun 20, 2002 at 21:41 UTC
    I was presuming a global variable was already available. If you have use strict, you'd have to "use vars" the variable, yes.

    Or, just make it a package variable explictly:

    sub my_subroutine { local $main::my_subroutine_level = $main::my_subroutine_level + 1; .... }

    -- Randal L. Schwartz, Perl hacker

      But local also works with lexical variables, doesn't it? IMHO, I didn't think it was necessary for $my_sub_level to be a global, per se. Since perl 5.6 it's been possible to localize nearly any variable; I've localized member variables of class instances, lexicals, arbitrary scalars within complex multi-level structures (hash containing arrayrefs of hashrefs containing hashrefs, etc.).

      Granted, localizing such a thing may (temporarily, subject to the enclosing scope) hide the thing being localized with what is effectively a global, but that's an internal implementation detail that seems to have mattered not, at least with the code in which I've used it.

      To return to the original question, isn't $depth referred to as a closure? Or (perhaps my semantics are incorrect) is sub recurse the closure? Semantics aside, I'm surprised no one mentioned the word.

      dmm

      If you GIVE a man a fish you feed him for a day
      But,
      TEACH him to fish and you feed him for a lifetime
        Since local works with variables in the symbol table and lexical (my) variables have no symbol table entries, you can't use local on a my variable. For example, this fails:
        perl -e 'my $foo; local $foo'
        with the error:
        Can't localize lexical variable $foo at -e line 1.

        -- Mike

        --
        just,my${.02}

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (12)
As of 2014-10-01 16:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    What is your favourite meta-syntactic variable name?














    Results (29 votes), past polls