Lexically Scoped Global Declarations: our
In the old days before use
strict, Perl programs would simply access global variables
directly. A better way to access globals nowadays is by the our declaration. This declaration is
lexically scoped in that it applies only through the end of the
current scope. However, unlike the lexically scoped my or the dynamically scoped local, our does not isolate anything to the
current lexical or dynamic scope. Instead, it provides “permission”
in the current lexical scope to access a variable of the declared
name in the current package. Since it declares a lexical name, it
hides any previous lexicals of the same name. In this respect,
our variables act just like
my variables.
If you place an our
declaration outside any brace-delimited block, it lasts through the
end of the current compilation unit. Often, though, people put it
just inside the top of a subroutine definition to indicate that
they’re accessing a global variable:
sub check_warehouse {
our @Current_Inventory;
my $widget;
foreach $widget (@Current_Inventory) {
say "I have a $widget in stock today.";
}
}Since global variables are longer in life and broader in
visibility than private variables, we like to use longer and
flashier names for them than for temporary variables. This practice
alone, if studiously followed, can do nearly as much as use strict can toward discouraging the
overuse of global variables, especially in the less
prestidigitatorial typists.
Repeated our declarations do not ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access