use warnings; use strict; use re 'eval'; my @real_count = (0,0,0,0); my $sequence = "GGGGGGGAGAAAAAAAAAAAAAAAGAAGGA"; my @pattern; $pattern[0] = "AAAAA"; $pattern[1] = "GGGGG"; $pattern[2] = "GGAGA"; $pattern[3] = "GAAGG"; for (my $i=0; $i <= 3; $i++) { $sequence =~ /$pattern[$i](?{$real_count[$i]++})(?!)/; } foreach (@real_count) { print "$_\n"; ## prints ## 11 ## 3 ## 1 ## 1 } #### use warnings; use strict; my @real_count = (0,0,0,0,); my $sequence = "GGGGGGGAGAAAAAAAAAAAAAAAGAAGGA"; my @patterns = qw/AAAAA GGGGG GGAGA GAAGG/; for my $i ( 0 .. $#patterns ) { while ( $sequence =~ m/$patterns[$i]/g ){ $real_count[$i]++; ## reset start position for next global match search pos($sequence) -= (length$patterns[$i]) -1; } } foreach (@real_count) { print "$_\n"; ## prints ## 11 ## 3 ## 1 ## 1 }