In meiner letzten Frage hier @amon gab eine großartige Antwort . Allerdings sagte er auch:
Erstens, bitte nicht
my $foo = $x if $y
. Du wirst unerwartet kommen und undefiniertes Verhalten, so ist es am besten, diese Syntax zu vermeiden.
Da die obige Konstruktion in wirklich vielen Quellen in der CPAN zu sehen war, frage ich mich, wie, wann, wo kann es falsch sein. (Ein Beispielcode wäre schön). Ich frage mich auch, warum Perl es erlaubt, wenn es schlecht ist.
Seine Formulierung war tatsächlich ein bisschen laxer. Dieser Wortlaut gehört mir. Beginnen wir mit der Dokumentation : (Schwerpunkt im Original)
HINWEIS: Das Verhalten eines
my
,state
oderour
, das mit einem Anweisungsmodifikator oder einem Schleifenkonstrukt (z. B.my $x if ...
) geändert wurde, ist undefiniert Der Wert dermy
-Variable kannundef
, ein zuvor zugewiesener Wert oder möglicherweise noch etwas anderes sein. Verlassen Sie sich nicht darauf. Zukünftige Perl-Versionen könnten etwas anderes als die Perl-Version sein, mit der Sie es ausprobieren. Hier sind Drachen.
Um genauer zu sein, das Problem besteht darin, eine lexikalische Variable zu verwenden, deren my
möglicherweise nicht ausgeführt wurde.
Überlegen Sie:
%Vor% Dies ist offensichtlich nicht das dokumentierte Verhalten von my
.
Weil die obige Konstruktion in sehr vielen Quellen in der CPAN gesehen wurde
Dieser Code ist fehlerhaft.
Tags und Links perl