use Data::Visitor::Callback; my $v = Data::Visitor::Callback->new( ignore_return_values => 1, hash => sub { my %map = ( qw/ abeLincoln lincoln / ); my $ref = $_; ##!!! my %new ; for my $key ( %{$ref} ){ my $fkey = $map{$_} ; $new{ defined $fkey ? $fkey : $key } = $ref->{$key}; } %{$ref} = %new; }, ); $v->visit();