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