use warnings; use strict; my %Ids; open (IDS, "$ARGV[0]") or die "unable to open file $!\n"; while () { chomp; $Ids {$_} = undef; } close IDS; open (GENES, "$ARGV[1]") or die "unable to open file $!\n"; my @genes; while () { if (/^>/) { unshift @genes, substr "$_ ", 1; } else { $genes[0] .= $_; } } close GENES; foreach my $gene (@genes) { my ($id) = $gene =~ /^(.*?)[,\s]/g; next if ! defined $id; ++$Ids{$id}; } foreach (sort keys %Ids) { print "$_\n" if defined $Ids{$_}; }