I know what my
is in Perl. It defines a variable that exists only in the scope of the block in which it is defined. What does our
do?
How does our
differ from my
?
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:
$package_name::variable
.On the other hand, our
variables are package variables, and thus automatically:
$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.