use warnings; use strict; use Data::Dumper; my %hash = (first => '1', second => '2'); print "Original: " . Dumper (\%hash); my %newHash = %{inAndOut (%hash)}; print "\nnew hash: " . Dumper (\%newHash); sub inAndOut { my (%hash) = @_; print "\nin sub: " . Dumper (\%hash); return {%hash}; } #### Original: $VAR1 = { 'first' => '1', 'second' => '2' }; in sub: $VAR1 = { 'first' => '1', 'second' => '2' }; new hash: $VAR1 = { 'first' => '1', 'second' => '2' };