Как правило, я бы написал это как while
утверждение:
while( s/(foo)(bar)/$1/ ) {
# my code to determine if I should stop
if(something) {
last;
}
}
Предостережение при использовании этого метода заключается в том, что поиск / замена будет начинаться каждый раз с начала, что может иметь значение в зависимости от вашегоregex.
Если вы действительно хотите сделать это в регулярном выражении, вы можете написать функцию, которая возвращает неизмененную строку, если вы достигли конечной точки, например, счетчик в этом случае:
my $count=0;
sub myfunc {
my ($string, $a, $b) = @_;
$count++;
if($count > 3) {
return $string;
}
return $a;
}
$mystring = "foobar foobar, foobar + foobar and foobar";
$mystring =~ s/((foo)(bar))/myfunc($1,$2,$3)/ge;
# result: $mystring => "foo foo, foo + foobar and foobar"
Если бы я знал ваш конкретный случай, я мог бы привести более полезный пример.