in reply to Re^2: Qualified package variable access ( s/lexical/private/ )
in thread Qualified package variable access

At the risk of starting a semantic flame war, I have to say that I personally prefer "lexical" because it is a better description of their actual scope -- from the point of specification to the enclosing right curly (or the end of the file).

If you search "private variable" you get things that are much more widely visible than Perl "my" variables (e.g. Java private attributes). I worry that a newbie coming from such a background may be confused by the use of "private" into misunderstanding the actual scope of the variable.

Package variables are in fact not lexically scoped, though the ability to access them by their unqualified name can be. Even if you turn on warnings, you can still access them outside the scope of the "our" by fully-qualifying their names. Consider the behavior of the following one-liners:

perl -E '{ our $foo = 42; } say $foo'

perl -Mstrict -Mwarnings -E '{ our $foo = 42; } say $main::foo'

Perl is a large, complex language, and we need to provide ways to help newbies find a way in. My concern with s/lexical/private/g is that it may teach newbies things they have to unlearn to progress.

Replies are listed 'Best First'.
Re^4: Qualified package variable access ( s/lexical/private/ )
by LanX (Saint) on Dec 18, 2020 at 17:58 UTC
    I'm aware of all of this, except the Java part.

    But I rather think of something like "private to the scope" is more correct.

    And I doubt that the explanation of term "lexical" is ever properly explained or even intuitive.

    according to Merriam Webster

    Definition of lexical

    1 : of or relating to words or the vocabulary of a language as distinguished from its grammar and construction Our language has many lexical borrowings from other languages.

    2 : of or relating to a lexicon or to lexicography lexical methods aim to list all the relevant forms— A. F. Parker-Rhodes

    But that's not the meaning, IMHO did Larry just adopt it from Lisp.°

    There it's called "lexical" in the meaning of "like you read it".

    perlglossary also mentions "static scoping" in contrast to "dynamic scoping", but the explanation is still confusing

    from perlglossary#lexical...

  • lexical analysis

    Fancy term for tokenizing.

  • lexical scoping

    Looking at your Oxford English Dictionary through a microscope. (Also known as static scoping, because dictionaries don’t change very fast.) Similarly, looking at variables stored in a private dictionary (namespace) for each scope, which are visible only from their point of declaration down to the end of the lexical scope in which they are declared. —Syn. static scoping. —Ant. dynamic scoping.

  • lexical variable

    A variable subject to lexical scoping, declared by my. Often just called a “lexical”. (The our declaration declares a lexically scoped name for a global variable, which is not itself a lexical variable.)

  • But all of this describes only the "scoping" not the nature of my variables - which are hold "in a private dictionary (namespace) for each scope" - sic!

    Maybe clearer from another perspective: local is a way to implement "dynamic scoping", but we wouldn't start calling package vars "dynamic variables", right?

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

    °) see CommonLISP#lexical_scope