Saving Global Values
Problem
You need to temporarily save away the value of a global variable.
Solution
Use the local
operator to save a previous global
value, automatically restoring it when the current block exits:
$age = 18; # global variable if (CONDITION) { local $age = 23; func(); # sees temporary value of 23 } # restore old value at block exit
Discussion
Unfortunately, Perl’s local
operator does
not create a local variable. That’s what my
does. Instead, local
merely preserves an existing
value for the duration of its enclosing block. Hindsight shows that
if local
had been called
save_value instead, much confusion could have
been avoided.
Still, there are three places where you must use
local
instead of my
:
You need to give a global variable a temporary value, especially
$_
.You need to create a local file or directory handle or a local function.
You want to temporarily change just one element of an array or hash.
Using local() for temporary values for globals
The first situation is more apt to happen with predefined, built-in
variables than it is with user variables. These are often variables
that Perl will use as hints for its high-level operations. In
particular, any function that uses $_
, implicitly
or explicitly, should certainly have a local $_
.
This is annoyingly easy to forget to do. See Section 13.15 for one solution to this.
Here’s an example of using a lot of global variables. The
$/
variable is a global that implicitly affects the behavior of the readline operator used ...
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.