use strict; # define hash keys that need conversion # (others will be unchanged) my %map_foo_to_bar = ( gearbox => 'gearbox1', drivetrain => 'the_drivetrain', smokestack => 'my_smokestack', junkyard => '_junkyard', ); # our hash data my %foo = (gearbox => 'five-speed', drivetrain => 'automatic', something_else => 'entirely'); # perform the mapping (wrapped in an anonymous hashref) my $new_name; my $bar = { map { defined ($new_name = $map_foo_to_bar{$_}) ? ($new_name => $foo{$_}) : ($_ => $foo{$_}) } (keys %foo) };