#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my %hash1 = (key1 => [qw(val1 val2)], key2 => ['val3'], ); my %hash2 = (val1 => [qw(val5 val6 val7)], val2 => [qw(val8 val9)], val3 => ['val3'], ); print Dumper { map { $_ => [ map @{ $hash2{$_} } , @{ $hash1{$_} } ] } keys %hash1 };