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}; }