[Moscow.pm] Еще про регекспы
Orlovsky Alexander
nordicdyno на yandex.ru
Пн Июл 7 01:11:58 PDT 2008
Столкнулся с нюансами работы в perl регекспов с переменными в локальной области видимости.
Вот пример:
my @lines = qw(abc abqwe);
for my $line ( @lines ) {
my $query;
next if $line !~ m/ab(.*)(?{ $query = $^N })/;
print "'$query'\n";
}
Выводит:
'c'
''
Если же вынести my $query за цикл, то выводится:
'c'
'qwe'
Причем, тот же результат получается, если мы объявим $query без my (strict выключен).
Это похоже на эффект замыкания, т.е. пременная связывается с регекспом в момент его компиляции (при первом проходе цикла). Но вот насколько правилен такой неочевидный эффект (на мой взгляд)?
И как дела обстоят в других версиях perl? (У меня в 5.8.8).
Подробная информация о списке рассылки Moscow-pm