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], ); Find_and_Increment ('TTTT_AAAA'); Find_and_Increment ('TTTT_CCCC'); Find_and_Increment ('TTTT_AAAA'); #-------------------- sub Find_and_Increment{ my ($pair) = @_; for my $k (keys %barcode_hash){ next unless ( my $aref = $barcode_hash{$k} ) -> [2] eq $pair; $aref->[3]++; print "$pair found at $k, $aref->[3] time(s)\n"; } } #### $ perl search_hash.pl TTTT_AAAA found at 4, 1 time(s) TTTT_AAAA found at 2, 1 time(s) TTTT_CCCC found at 1, 1 time(s) TTTT_AAAA found at 4, 2 time(s) TTTT_AAAA found at 2, 2 time(s)