in reply to Re^4: how to declare a package variable
in thread how to declare a package variable
the second variant doesn't create a lexical.
Neither does the first!
our only gives lexical visibility; not a true lexical variable.
Ie. With my, it creates an entirely new variable at each level of scope:
my $a = 123; { my $a; print $a; ## produces "Use of uninitialized value $a in print ... +" because the above new $a is entirely new; thus uninitialised. } print $a;; ## prints: 123
However, our only gives lexically scoped access to a single variable:
our $a = 123; { our $a; ## produces ""our" variable $a redeclared at ..." referenc +es the same variable as the first our $a print $a; ## prints 123 ## New scope, same variable, existing valu +e. } print $a;; ## prints 123
|
|---|