my @strings = qw( aaabbbb ab abb aabb aaabb aabbb ); for my $string ( @strings ) { our $a_counter = 0; our $b_counter = 0; print "In $string there were $a_counter 'a's and $b_counter 'b's. \n" if $string =~ /(a(?{$a_counter ++;}))+(b(?{$b_counter ++;}))+/; } __END__ C:\test>junk In aaabbbb there were 3 'a's and 4 'b's. In ab there were 1 'a's and 1 'b's. In abb there were 1 'a's and 2 'b's. In aabb there were 2 'a's and 2 'b's. In aaabb there were 3 'a's and 2 'b's. In aabbb there were 2 'a's and 3 'b's.