my %values = ( name => 'chromatic', rank => 'saint', style => 'obnoxious', ); my %rev_values = do_something(%values); foreach my $key (keys %rev_values) { print "$key => $rev_values{$key}\n"; } sub do_something { my %values = @_; foreach my $key (keys %values) { print "$key => $values{$key}\n"; $values{$key} = reverse $values{$key}; } return %values; } #### my %values = ( foo => 1, bar => 2, baz => 3, ); my %rev_values = do_something(\%values); sub do_something { my $h_ref = shift; my %backwards; foreach my $key (keys %$h_ref) { print "$key => ", $h_ref->{$key}, "\n"; $backwards{$h_ref->{$key}} = $key; } return \%backwards; }