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 | [reply] [d/l] |
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
| [reply] [d/l] [select] |
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} | [reply] [d/l] [select] |