[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