Perl: Почему eval '/(…)/' не устанавливает $1?

Если совпадение с регулярным выражением происходит внутри eval, изменения в переменных, связанных с захватом ($1 и т. д.), не видны во внешней среде. Это ошибка?

perlopи perlre, кажется, не упоминают никаких подобных ограничений.

Например:

 use strict; use warnings;
 $_ = "hello";
 eval '/(.*)/';
 print "GOT: $1\n";

дает:

Use of uninitialized value $1 in concatenation (.) or string at -e line 1.
GOT:

Более краткая демонстрация:

perl -we '$_="foo"; eval q(/(.*)/;) ; print "GOT:$1\n";'
13
задан Jim Avera 6 June 2012 в 06:24
поделиться