Debido a la precedencia de operadores Perl la declaración está siendo analizado como:
($condition ? $a = 2 : $a) = 3 ;
Debido a que el operador?: Produce un resultado asignable, 3 se asigna al resultado de la condición.
Cuando $ condición es verdadera significa que este $ a = 2 = 3 dar $ a = 3
Cuando $ condición es falsa, esto significa $ a = 3 dar $ a = 3
La forma correcta de escribir esto es
$a = $condition ? 2 : 3;
en general, usted debe salir de la costumbre de utilizar los condicionales asignación de tarea, como en el ejemplo originales - es el tipo de cosa que conduce a Perl conseguir una reputación de ser escritura -solamente.
Una buena regla de oro es que los condicionales son solo para valores simples, nunca expresiones con efectos secundarios. Cuando usted u otra persona necesiten leer este código dentro de ocho meses, ¿preferiría que se lea así?
$x < 3 ? foo($x) : bar($y);
¿Te gusta esto?
if ($x < 3) {
$foo($x);
} else {
$bar($y);
}
"Cuando $ condición es verdadera, esto significa $ a = 2 = 3 entrega $ a = 3" habría pensado $ a = 2 = 3 sería un error de sintaxis expresión o lValue de error requerido o tal ... ¿Cómo se evalúa exactamente? – sundar
Tienes razón, lo modificaré, es ($ a = 2) = 3 en lugar de $ a = 2 = 3 – Pat