my @strings = qw( abb aabbb aaabbbb ab aab aabb abbb ); for ( @strings ) { our $a_counter = 0; our $b_counter = 0; if ( /(a(?{$a_counter ++;}))+(b(?{$b_counter ++;}))+/ && $b_counter == $a_counter + 1 ) { print "In '$_' there were $a_counter 'a's and $b_counter 'b's.\n"; } }