Beim Versuch, eine Variable zuzuweisen und sie in einer Operation in Perl auf ihre Definiertheit zu testen, wie es zum Beispiel in einem if
Zustand nützlich wäre, würde es mir natürlich erscheinen schreiben:Die Rangfolge beim Zuweisen und Testen der Definiertheit in Perl verstehen
if (defined my $thing = $object->get_thing) {
$thing->do_something;
}
Soweit mein Verständnis geht, defined
den Vorrang eines rightward list operator hat, die kleiner als die von der Abtretung niedriger ist daher würde ich meinen Code oben erwarten zu sein äquivalent zu:
if (defined (my $thing = $object->get_thing)) {
$thing->do_something;
}
Während letzterer Code in Klammern funktioniert, führt der erste zu dem folgenden schwerwiegenden Fehler: "Definierter Operator kann nicht in skalarer Zuweisung geändert werden".
Es ist keine große Sache, Klammern hinzuzufügen, aber ich würde gerne verstehen, warum die erste Version nicht funktioniert, z. welche Art von "Ding" defined
ist und was hat seinen Vorrang?
Wissen Sie, was bestimmt, dass 'definiert' einen höheren Vorrang hat als die Zuweisung? Zum Beispiel "print my $ test = 'test'" druckt "test". – scozy
Ich habe meine Antwort aktualisiert. – ikegami
@scozy: Denken Sie nicht an "mein" als Operator mit Vorrang. Das Schlüsselwort 'my' führt zu einem speziellen Parsing. – gensym