# cat 791596.pl use strict; use warnings; use Data::Dumper; my %h1 = ( e=>'f', c=>'d', a=>'b' ); my %h2 = ( e=>'K', a=>'J', q=>'V' ); do { my @b = grep {exists $h1{$_}} keys %h2; @h1{@b} = @h2{@b}; }; print Dumper(\%h1); # perl 791596.pl $VAR1 = { 'e' => 'K', 'c' => 'd', 'a' => 'J' };