our makes a lexically scoped alias for a global. That means it remains in scope even if you change the package. Compare:
with:use strict; package foo; our $bar = 1; # at this point, using $bar could mean TWO things: # 1) try to access the global $foo::bar # 2) try to access the alias named $bar for $foo::bar # The lexical (second) one wins in perl, so you don't # get a use strict error print $bar; package baz; # Now $bar could mean: # 1) try to access the global $baz::bar # 2) try to access the alias named $bar for $foo::bar # The lexical (second) one still wins. print $bar; # works, prints $foo::bar even though we are in baz
use strict; package foo; use vars qw/$bar/; $bar = 1; # $bar has only one meaning, access $foo::bar print $bar; package baz; # $bar has only one meaning, access $baz::bar print $bar; #error
To answer the original question, the documentation is right, the our (as used in the first code fragment) has no effect outside the file. But... you can still access the global $foo::bar from another file. But this is NOT using the "our" alias as you can for example see by trying to do in that other file:
The lexical alias is gone, and $bar just accesses the global in the package that is in scope.package foo; print $bar; # prints the global $foo::bar package baz; print $bar; # prints the global $baz::bar
In reply to Re: Re: 'our' scoping
by thospel
in thread 'our' scoping
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |