Wenn Sie versuchen, eine Variable zuzuweisen und sie in einer Operation in Perl auf ihre Definiertheit zu testen, wie es zum Beispiel in der Bedingung if
nützlich wäre, wäre es für mich natürlich, zu schreiben:
Nach meinem Verständnis hat defined
den Vorrang eines Rechtslistenoperators , die niedriger ist als die der Aufgabe, daher würde ich erwarten, dass mein Code wie folgt lautet:
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. Was für ein "Ding" ist defined
und was hat Vorrang?
Benannte Operatoren sind unterteilt in unäre Operatoren (Operatoren, die immer genau einen Operanden verwenden) und Listenoperatoren (alles andere) [1] .
defined
und my
[2] sind unäre Operatoren , die eine viel höhere Priorität haben als andere benannte Operatoren.
Das Gleiche gilt für Subs, also werde ich sie demonstrieren.
%Vor% Aber natürlich ist defined
keine Lvalue-Funktion, daher führt das Auffinden auf der LHS einer Zuweisung zu einem Fehler.
and
, or
, not
, xor
, lt
, le
, gt
, ge
, eq
, ne
und cmp
sind nicht als benannte Operatoren betrachtet.
my
ist sehr ungewöhnlich. Abgesehen davon, dass es sowohl einen Kompilierungszeit- als auch einen Laufzeit-Effekt hat, hängt seine Syntax davon ab, ob Parens um seine Argumente herum verwendet werden oder nicht. Ohne Parens ist es ein unärer Operator. Mit Parens ist es ein Listenoperator.
Tags und Links perl variable-assignment operator-precedence defined