package foo; use vars '$foo'; sub foo1 { my $prev= $foo; $foo= shift if @_; return $prev; } { my $foo; sub foo2 { my $prev= $foo; $foo= shift if @_; return $prev; } } my $foo; sub foo3 { my $prev= $foo; $foo= shift if @_; return $prev; } #### package foo; use vars '$foo'; sub TIESCALAR { return bless {}, foo::ThereIsNoSuchVariable; } tie $foo, 'foo';