my $hash1=shift; open (my $fh1, "<",$hash1) or die "$!"; my %h1=(); while (<$fh1>) { chomp; my ($k1,$v1)=split /\t/; $h1{$k1}=$v1; } my $hash2=shift; open (my $fh2, "<",$hash2) or die "$!"; my %h2=(); while (<$fh2>) { chomp; my ($k2,$v2)=split /\t/; $h2{$k2}=$v2; } my %combined_hash = map { $_ => join ',', map split(/,/, $h2{$_}), split /,/, $h1{$_} } keys %h1; while (my ($k, $v) = each %combined_hash) { print "$k\t$v\n"; }