use Data::Dumper; $|++; my %hash=(foo=>'bar',); sub bar(){ print "(".((caller(1))[3]||'main').")\n"; print Data::Dumper->Dump([\%hash],['*hash']); } sub foo($) { local $hash{foo}="baz"; bar(); } foo bar, bar; __END__ (main) %hash = ( 'foo' => 'bar' ); (main::foo) %hash = ( 'foo' => 'baz' ); (main) %hash = ( 'foo' => 'bar' );