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"; } }