in reply to sub and anonymous sub

I'll give you a scarier one:
sub my_sub { local $my_sub_level = $my_sub_level + 1; .. }
Yes, the localization for the variable doesn't happen until the end of the statement, so the value on the right is the previous value (plus one), and it's undone at the end of the block.

-- Randal L. Schwartz, Perl hacker

Replies are listed 'Best First'.
Re: •Re: sub and anonymous sub
by BrowserUk (Pope) on Jun 20, 2002 at 21:32 UTC

    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.

      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.


        If you GIVE a man a fish you feed him for a day
        TEACH him to fish and you feed him for a lifetime
Re: Re: sub and anonymous sub
by stefp (Vicar) on Jun 27, 2002 at 19:20 UTC
    I am not sure it is valuable to teach odd tricks that are likely to disappear with perl6.

    -- stefp -- check out TeXmacs wiki

      An odd response.
      1. Perl6 is still at least 18 months away from being available for other than "early adopters".
      2. This trick works fine in Perl6, if you change local to temp, which the P5toP6 translator will do for you.
      3. Perl5 will remain alive for at least a few years even after Perl6 comes around.

      -- Randal L. Schwartz, Perl hacker