http://www.perlmonks.org?node_id=482218

dsb has asked for the wisdom of the Perl Monks concerning the following question:

From the docs:
An "our" declares the listed variables to be valid globals within the enclosing block, file, or "eval". That is, it has the same scoping rules as a "my" declaration, but does not create a local variable.
...
An "our" declaration declares a global variable that will be visible across its entire lexical scope, even across package boundaries. The package in which the variable is entered is determined at the point of the declaration, not at the point of use.

Given that explanation, I would've thought you could use our() to localize a variable. If our() has the same scoping rules as my(), then I would've thought that the following two snippets result the same.

$var = 1; { my $var = 2; print $var, "\n"; # prints 2 } print $var, "\n"; # prints 1
and
our $var = 1; { our $var = 2; print $var, "\n"; # prints 2 } print $var, "\n"; # also prints 2
But they don't, and I can't understand why. I'm guessing that it has something to do with the fact the second our() declaration clobbers the first, but that assumption seems to ignore the scoping rules that the docs say are the same as my().

Anyone?


dsb
This @ISA my cool %SIG