Perl: Warum setzt eval '/ (…) /' nicht $ 1?
Wenn eine Übereinstimmung mit regulären Ausdrücken innerhalb einer Auswertung auftritt, sind Änderungen an den erfassungsbezogenen Variablen ($ 1 usw.) in der äußeren Umgebung nicht sichtbar. Ist das ein Bug?
Perlop undperlre scheint keine solche Einschränkung zu erwähnen.
Zum Beispiel:
use strict; use warnings;
$_ = "hello";
eval '/(.*)/';
print "GOT: $1\n";
gibt:
Use of uninitialized value $1 in concatenation (.) or string at -e line 1.
GOT:
Eine prägnantere Demo ist:
perl -we '$_="foo"; eval q(/(.*)/;) ; print "GOT:$1\n";'