in reply to What's wrong with this local() ?

Because that's what local does! It lets you temporarily re-use the name of a package variable declared elsewhere.

Consider this expanded example:

#!/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";
which outputs...
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.