#!/usr/bin/perl -w use strict; my $cnt; my $res; my $regex = qr/ (?{ $cnt = 0 }) # Initialize $cnt. (?: # group only a (?{ local $cnt = $cnt + 1; # Update $cnt, backtracking-safe. }) )* aaaa (?{ $res = $cnt }) # success-copy to non-local var /x; foreach my $line () { chomp $line; print STDERR "huzzah |$`| |$&| |$'| $res $line\n" if $line =~ $regex; } __DATA__ aaaaaaaa aaaa