Если совпадение с регулярным выражением происходит внутри 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";'