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

Thank you for the explanations. There is just one more thing: Are the semantics of
package P; $A = 'something';
better matched by
package P; $P::A = 'something';
or by
package P; our $A = 'something';
or do they all differ from one another?

Replies are listed 'Best First'.
Re^3: how to declare a package variable
by BrowserUk (Patriarch) on Apr 15, 2016 at 09:50 UTC

    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.
      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.
Re^3: how to declare a package variable
by AnomalousMonk (Archbishop) on Apr 15, 2016 at 12:05 UTC

    BrowserUk has already answered this question pretty clearly here and here. I just want to re-emphasize that all three statements you give as examples above do the same thing: they create (if the variable didn't already exist) and assign to a global variable $A in the P package (or namespace), with the our statement further granting lexical visibility.

    The  $A = 'something'; statement is made illegal (due to all the foot injuries) by enabling strictures; see strict.


    Give a man a fish:  <%-{-{-{-<