use Data::Dumper; $Data::Dumper::Sortkeys = 1; $Data::Dumper::Indent = 0; my $args = { foo => 1, baz => 2, }; print "Before calling mysub(\$args)\n"; print Dumper($args), "\n\n"; mysub($args); print "After calling mysub(\$args)\n"; print Dumper($args), "\n\n"; sub mysub { my $args = shift; local $args->{'foo'} = $args->{'foo'}; $args->{'foo'} += 100; # 101 now. print "Inside mysub()\n"; print Dumper($args), "\n\n"; othersub($args); } sub othersub { my $args = shift; local $args->{'baz'}; delete $args->{'baz'}; print "Inside othersub()\n"; print Dumper($args), "\n\n"; } #### Before calling mysub($args) $VAR1 = {'baz' => 2,'foo' => 1}; Inside mysub() $VAR1 = {'baz' => 2,'foo' => 101}; Inside othersub() $VAR1 = {'foo' => 101}; After calling mysub($args) $VAR1 = {'baz' => 2,'foo' => 1};