Was ist in der Syntax "my $ foo = $ x if $ y" falsch?

8

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.

    
Nemo 24.11.2013, 17:54
quelle

1 Antwort

11

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 oder our , das mit einem Anweisungsmodifikator oder einem Schleifenkonstrukt (z. B. my $x if ... ) geändert wurde, ist undefiniert Der Wert der my -Variable kann undef , 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.

    
ikegami 24.11.2013, 18:09
quelle

Tags und Links