Often if you see an iterator interface you assume that it is only generating the return values "on demand" and not pre-computing them all.
... and that is also true here. Since backtracking patterns quickly generate a very large number of matches I don't dare to precompute them.
Could the regex engine be used while this iterator object is "active?"
The following code works, and that makes me believe there won't be any other re-entrancy issues. But I know very little about the internals of the engine, and what may blow under certain circumstances.
use Test::More 'no_plan';
use Regexp::AllMatches;
my $str = 'abc';
my $m1 = Regexp::AllMatches::->new($str => qr/.+/);
is($m1->next, 'abc');
my $m2 = $m1->clone;
is($m1->next, 'ab');
is_deeply([ $str =~ /./g ], [qw/ a b c /]);
is($m1->next, 'a');
is($m2->next, 'ab');
__END__
ok 1
ok 2
ok 3
ok 4
ok 5
1..5
lodin |