Да, новое успешное совпадение с регулярным выражением заменяет $1
и $2
.
Вы можете полностью избежать глобальных переменных следующим образом:
perl -e'
my $name = "start middle end";
if ( my ($orig, $rep) = $name =~ /sta(.*?)\s\w+\s(.*)/ ) {
$name =~ s/\Q$orig/$rep/;
CORE::say $name;
}
'
Еще лучше, вы можете избежатьвыполняя два совпадения следующим образом:
perl -e'
my $name = "start middle end";
if ( $name =~ s/sta\K.*?(?=\s\w+\s(.*))/$1/ ) {
CORE::say $name;
}
'
Однако я бы использовал следующее:
perl -e'
my $name = "start middle end";
if ( (my ($prefix, $suffix, $foo) = $name =~ /^(.*?sta).*?(\s\w+\s(.*))/ ) {
CORE::say "$prefix$foo$suffix";
}
'
Обратите внимание, что в вашем коде произошла ошибка вставка кода , котораяЯ исправил, используя quotemeta
(как \Q
).