Re: регулярные выражения и $1
От: anonymous Россия http://denis.ibaev.name/
Дата: 07.06.10 10:53
Оценка: 7 (2)
Здравствуйте, slava_phirsov, Вы писали:

_>Имеем вот такой пример кода:

_>
_>until ($bar =~ $re)
_>{
_>    $bar .= shift @foo;
_>    print $bar . "\n";
_>}
_>

_>Выражение в цикле until совпало, но $1 осталось неопределенным ( ), однако совпадение того же самого выражения ниже нормально модифицировало $1. Это лыжи не едут, или как?

perldoc perlre:

The numbered match variables ($1, $2, $3, etc.) and the related punctuation set ($+, $&, $`, $', and $^N) are all dynamically scoped until the end of the enclosing block or until the next successful match, whichever comes first.

То есть происходит следующее: выражение совпадает с шаблоном, мы выходим из блока, и там, вне блока, уже совсем другая переменная $1. (На самом деле та же самая, но значения у неё уже не будет.)

Для сравнения:
until ($bar =~ $re and print($1))
{
    $bar .= shift @foo;
    print $bar . "\n";
}
perl регулярные выражения
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.