my @transformed = map +{ map { my $k = delete $_->{ACC}; $k => $_; } @$_ }, $data1, $data2; my @merged; for my $key (keys %{ $transformed[0] }) { if (exists $transformed[1]{$key}) { push @merged, { ACC => $key, %{ $transformed[0]{$key} }, %{ $transformed[1]{$key} } }; } } print Dumper \@merged;