#!/usr/bin/perl use warnings; use strict; my %hash1 = (key1 => 'val1,val2', key2 => 'val3', ); my %hash2 = (val1 => 'val5,val6,val7', val2 => 'val8,val9', val3 => 'val3', ); my %result = map { $_ => join ',', map split(/,/, $hash2{$_}), split /,/, $hash1{$_} } keys %hash1; while (my ($k, $v) = each %result) { print "$k: $v\n"; }