use warnings; use strict; my %barcode_hash = ( 1 => ['AGCTCGTTGTTCGATCCA','GAGAGATAGATGATAGTG','TTTT_CCCC',0], 2 => ['AGCTCGTTGTTCGATCCA','GAGAGATAGATGATAGTG','TTTT_AAAA',0], 3 => ['AGCTCGTTGTTCGATCCA','GAGAGATAGATGATAGTG','TTTT_BBBB',0], 4 => ['AGCTCGTTGTTCGATCCA','GAGAGATAGATGATAGTG','TTTT_AAAA',0], ); my $barcode_pair_35 = 'TTTT_AAAA'; for my $key (sort keys %barcode_hash) { print "Found at $key\n" if $barcode_hash{$key}[2] eq $barcode_pair_35; } # - OR - my %lookup; for my $key (sort keys %barcode_hash) { push @{ $lookup{ $barcode_hash{$key}[2] } }, $key; } print "Looked up at ".join(", ",@{$lookup{$barcode_pair_35}})."\n"; __END__ Found at 2 Found at 4 Looked up at 2, 4