use feature ":5.14"; use warnings FATAL => qw(all); use strict; use Data::Dump qw(dump pp); my %a = qw(key1 val1 key2 val2 key3 val3); my %b = qw(val1 val5 val2 val6 val3 val7 val4 val8); my %c = %{{map {($_, $b{$a{$_}})} keys %a}}; pp(\%c) #### { key1 => "val5", key2 => "val6", key3 => "val7" }