in reply to Re^2: how to declare a package variable
in thread how to declare a package variable

This package P; our $a = 'something'; is equivalent to package P; $P::a = 'something';.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^4: how to declare a package variable
by scigeek (Initiate) on Apr 15, 2016 at 10:10 UTC
    I don't believe this to be entirely correct since the second variant doesn't create a lexical.
      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

      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
      In the absence of evidence, opinion is indistinguishable from prejudice.