Great question: How does our
differ from my
and what does our
do?
In Summary:
Available since Perl 5, my
is a way to declare non-package variables, that are:
- private
- new
- non-global
- separate from any package, so that the variable cannot be accessed in the form of
$package_name::variable
.
On the other hand, our
variables are package variables, and thus automatically:
- global variables
- definitely not private
- not necessarily new
- can be accessed outside the package (or lexical scope) with the
qualified namespace, as
$package_name::variable
.
Declaring a variable with our
allows you to predeclare variables in order to use them under use strict
without getting typo warnings or compile-time errors. Since Perl 5.6, it has replaced the obsolete use vars
, which was only file-scoped, and not lexically scoped as is our
.
For example, the formal, qualified name for variable $x
inside package main
is $main::x
. Declaring our $x
allows you to use the bare $x
variable without penalty (i.e., without a resulting error), in the scope of the declaration, when the script uses use strict
or use strict "vars"
. The scope might be one, or two, or more packages, or one small block.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…