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 exitDiscussion
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 ...
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