You can still do the same thing using lexicals (if you are allergic to using symbol-table variables). The only thing to be careful is to reuse the same
push statement and same target array every time. This is adapted from the code in
Re^3: Regexes: finding ALL matches (including overlap):
{
my @matches;
my $push = qr/(?{ push @matches, $1 })/;
sub match_all_ways {
my ($string, $regex) = @_;
@matches = ();
$string =~ m/($regex)$push(?!)/;
return @matches;
}
}
print match_all_ways( "TXXXABCDGXXXCCCDTGYYYCCCYYYCC", qr/XXX.*YYY/ );
Technically, $push is not needed -- you could just include
(?{push @matches, $1}) in the m// statement inline. However, I like this way as it makes it a much more obvious that this part of the regex is only compiled once.