Perl: Почему eval '/ (…) /' не устанавливает $ 1?
Если в eval происходит совпадение с регулярным выражением, изменения переменных, связанных с захватом ($ 1 и т. Д.), Не видны во внешней среде. Это ошибка?
Perlop а также Perlre Похоже, не упомянул о таком ограничении.
Например
use strict; use warnings;
$_ = "hello";
eval '/(.*)/';
print "GOT: $1\n";
gives:
Use of uninitialized value $1 in concatenation (.) or string at -e line 1.
GOT:
Более краткая демонстрация:
perl -we '$_="foo"; eval q(/(.*)/;) ; print "GOT:$1\n";'