my vs our vs local
by:
2 minutes
276 Words
2014-03-16 20:00 -0400
The short version for the impatient
my()
creates a local variableour()
creates a package variablelocal()
temporarily changes the local value of a global variable- The above is mostly true.
The long version for the irrepressibly quixotic
my()
my
declares the listed variable to be local to the enclosing block, file,
or eval
. That is to say its scope is local. This kind of variable is
known as a lexical variable. Note that lexical variables are hidden from
subroutines which are called from within the enclosing block. This is known as
lexical scoping.
our()
our
creates an alias to a package variable. The alias is local to the
enclosing block, file, or eval
. That is to say the alias is lexically scoped
just like any lexical variable. However a package variable belongs to a
package. It can be accessed from anywhere if you use its fully qualified name.
Here are two examples of fully qualified package variables:
$main::a
%MyPackage::boop
Note that package variables are also global variables.
local()
local
gives temporary values to global variables. It does not create a local
variable. It is most commonly used when you want to locally modify a global
variable such as one of the punctuation variables. For example:
{
local $| = 1; # enable autoflush for STDOUT
say "hi mom";
}
local
modifies the listed variable to be local to the enclosing block,
file, or eval
– AND to any subroutine called from within that block. This
is known as dynamic scoping.
Sources
For a more complete understanding I recommend perldoc perlfunc
and especially
perldoc perlsub
. Also the following links may be helpful: