Because that's what local does! It lets you temporarily re-use the name of a package variable declared elsewhere.
Consider this expanded example:
which outputs...#!/usr/bin/perl use strict; use warnings; package Foo; our $x = "blah"; package Bar; print $Foo::x, "\n"; { local $Foo::x; print $Foo::x, "\n"; $Foo::x = 42; print $Foo::x, "\n"; } print $Foo::x, "\n";
blah Use of uninitialized value in print at loc.pl line 15. 42 blah
The first print shows the original value of $Foo::x, the second one throws an unitialized value warning because the localized version of $Foo::x has not been assigned a value. The third print gives 42 because we assigned that to the temporary $Foo::x, and the last one prints "blah" again, because the scope of the local has ended.
In reply to Re: What's wrong with this local() ?
by friedo
in thread What's wrong with this local() ?
by saintmike
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |