Just because it's Perl, you're not obligated to find a regular expression approach to every problem. If the regex solution is elusive, solve it in a way that is easy for any programmer to understand:
# In a world without regular expressions,
# it's just a simple matter of programming:
my $count = 0;
my $pos = 0;
while( $pos != length $string ) {
$count++ if 'aa' eq substr $string, $pos++, 2
}
Then as you become more proficient with Perl idioms, and the Perl language's built-in functions, you might discover pos:
# Using 'pos()':
while( $string =~ /aa/g ) {
pos($string) = pos($string) - 1;
$count++
}
Eventually with a little work and study (perlre, perlrequick, perlretut), you may arrive at a point where this idiom is within reach:
$count++ while $string =~ /a(?=a)/g; # Using a lookahead assertion.
But what's important with Perl is first learning how to get the job done, and then later layering in how to do it in a more Perlish way. Eventually you'll discover =()=, which can lead to this:
my $c = () = $string =~ m/(?=aa)/g;
say $c;
...and at that point you might back off and decide that's too idiomatic, which is also perfectly ok; nobody will mind. ;)
|