из perldoc perlre
Нумерованные переменные соответствия ($ 1, $ 2, $ 3 и т. Д.) И связанный с ними набор знаков препинания ($ +, $ &, $ `, $ 'и $ ^ N) все динамически ограничиваются до конца вложенного блок или до следующего успешного матча, в зависимости от того, что наступит раньше. (См. «Сложные заявления» в perlsyn.)
Это означает, что при первом запуске регулярного выражения или замещения в области создается новая local
измененная копия. Исходное значение восстанавливается (& larara; la local), когда заканчивается область. Таким образом, $1
будет равен 10 до тех пор, пока регулярное выражение не будет запущено, 20 после регулярного выражения и 10 снова после завершения подпрограммы.
Но я не использую переменные регулярных выражений вне подстановок. Я нахожу гораздо яснее говорить такие вещи, как
#!/usr/bin/perl
use strict;
use warnings;
sub bla {
my $x = shift;
$x =~ s/(\d*)/$1 $1/;
return $x;
}
my $y = "10 20";
my ($first, $second) = $y =~ /(\w*)\s+(\w*)/;
my $z = &bla($second);
my $w = $first;
print "$first $second\n";
, где $first
и $second
имеют лучшие имена, которые описывают их содержание.