for (my $i=0; $i<@ids; $i++) { my $q; while ( my ($key, $value) = each(%hash) ) { #print "$key =>$value\n"; if ($ids[$i] eq $key) { print "$key => $value => $extra[$i]\n"; } #if ($ids[$i] ne $key) { elsif ($ids[$i] ne $key) { $q = "$ids[$i]\t $extra[$i]\n"; } } # PROBLEM IS HERE: IT IS PRINTING ONE OF EACH VALUE, NOT JUST THOSE THAT AREN'T IN THE HASH print "$q"; }