Wegen des Vorrangs Perl Operator die Anweisung analysiert wird als:
($condition ? $a = 2 : $a) = 3 ;
Da der Operator?: Erzeugt einen zuweisbaren Ergebnis wird 3 zu dem Ergebnis der Bedingung zugewiesen.
Wenn $ Bedingung erfüllt ist, bedeutet dies $ a = 2 = 3 geben $ a = 3
Wenn $ Bedingung falsch ist dies bedeutet, a $ = 3 geben $ a = 3
Die richtige Art und Weise zu schreiben dies
$a = $condition ? 2 : 3;
im allgemeinen sollten Sie wirklich aus der Gewohnheit conditionals der Verwendung Zuordnung zu tun, wie im ursprünglichen Beispiel - es ist die Art von Dingen, die einen guten Ruf bekommen für sein schreiben in Perl führt -nur.
Eine gute Faustregel ist, dass Bedingungen nur für einfache Werte, nie Ausdrücke mit Nebenwirkungen sind. Wenn Sie oder jemand anders diesen Code in acht Monaten lesen muss, würden Sie es lieber so lesen?
$x < 3 ? foo($x) : bar($y);
Oder so?
if ($x < 3) {
$foo($x);
} else {
$bar($y);
}
"Wenn $ Bedingung erfüllt ist, bedeutet dies $ a = 2 = 3 geben $ a = 3" Ich würde einen Ausdruck Syntaxfehler oder L-Wert erforderlich Fehler oder so gedacht haben $ a = 2 = 3 wäre ... Wie genau wird es bewertet? – sundar
Sie haben Recht, ich werde es ändern es ist ($ a = 2) = 3 statt $ a = 2 = 3 – Pat