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


in reply to Re: OUR declaration
in thread OUR declaration

Your points are true, but they probably need both repeatition and clarification. I provide two examples to clarify your points, for the earlier ones were too simple.

Example 1. Here we show that the our var can also overide the scope of the my var: the winner is the one who declares last:

my $foo = 1; our $foo = 2; print $foo ; # prints 2
The result will be different when we reverse the order of declaration:
our $foo = 2; my $foo = 1; print $foo ; # prints 1

Example 2. Here we show that inter-package scopes are only valid during 'no strict'; plus, access to the our variable is possible only if the LEXICAL scope of the our variable is still in force (that is, it reins through the whole file and is not limited just to a block):

no warnings; package Foo; use Data::Dumper; { our $foo = 'bar'; } print 'Foo: '. $foo, "\n"; # prints 'bar' package Bar; no strict; print 'Bar: '. $foo, "\n"; # $foo is undefined
Having already acknowledged that there were no mistatements in your post, these exaples were meant only as repeatition to the concepts you have already advanced. Same concepts through different examples.