It may be that
local doesn't do what you think it does. It would make a lot more sense to write something like this:
package blarg;
use strict;
use warnings;
sub hrmph {
our $global = "blarg";
print "$global\n";
local $global;
$global = "hrm, just in here!";
print "$global\n";
# when this scope is done, global goes back to "blarg" automatical
+ly
}
Note that use vars is pretty much the same thing as our except that the package variable isn't bound locally to a sub as a pseudo-lexical. But if it was a case of use vars local would work the same way. It doesn't make the variable lexical, it makes the values you use in it local to the scope.