in reply to Re^3: Count of Repeated Characters
in thread Count of Repeated Characters

while("dftaatzaaadfaa" =~ /aa/g) {$count++}

Replies are listed 'Best First'.
Re^5: Count of Repeated Characters
by davido (Cardinal) on Apr 27, 2015 at 04:35 UTC

    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. ;)


    Dave

      Thanks Dave for the explanation.