As a further step, associating patterns with their counts and (cached) regex objects in a hash may be worthwhile:
>perl -wMstrict -le
"my $sequence = 'GGGGGGGAGAAAAAAAAAAAAAAAGAAGGA';
my %patterns =
map { $_ => { count => 0, regex => qr{ (?= \Q$_\E) }xms } }
qw(AAAAA GGGGG GGAGA GAAGG)
;
$patterns{$_}{count} =()=
$sequence =~ m{ $patterns{$_}{regex} }xmsg
for keys %patterns;
print qq{$_: $patterns{$_}{count}} for sort keys %patterns;
"
AAAAA: 11
GAAGG: 1
GGAGA: 1
GGGGG: 3
or
>perl -wMstrict -le
"my $sequence = 'GGGGGGGAGAAAAAAAAAAAAAAAGAAGGA';
my %patterns =
map { $_ => { count => 0, regex => qr{ (?= \Q$_\E) }xms } }
qw(AAAAA GGGGG GGAGA GAAGG)
;
$_->{count} =()= $sequence =~ m{ $_->{regex} }xmsg
for values %patterns;
print qq{$_: $patterns{$_}{count}} for sort keys %patterns;
"
AAAAA: 11
GAAGG: 1
GGAGA: 1
GGGGG: 3