#! perl -slw use strict; use Data::Dump qw[ pp ]; my %hash1 = ( 'key1', 'val1,val2', 'key2', 'val3' ); my %hash2=( 'val1','val5,val6,val7', 'val2','val8,val9', 'val3','val3' ); my %newhash = map { $_ => join ',', @hash2{ split ',', $hash1{ $_ } }; } keys %hash1; pp \%newhash; __END__ C:\test>junk { key1 => "val5,val6,val7,val8,val9", key2 => "val3" }