use strict; sub read_hash { my $fname = shift; open (my $fh, "<",$fname) or die "$!"; my %hash=(); while (<$fh>) { my $line=$_; chomp $line; my ($key,$value)=split /\t/, $line, 2; $hash{$key}=$value; } return \%hash; } my $hash1=shift; my $hash2=shift; my $h1=read_hash("$hash1"); my $h2=read_hash("$hash2"); my @fields; while (my ($k1, $v1) = each %$h1) { @fields=split /,/, $h1->{$k1}; while (my ($k2, $v2) = each %$h2) { if ( grep( /^$k2$/, @fields ) ) { print $k2, "\t", $v2, "\t", "$k1", "\n" } } }