Din cauza precedentului operatorului Perl, instrucțiunea este analizată ca fiind:
($condition ? $a = 2 : $a ) = 3 ;
Deoarece operatorul ?: produce un rezultat asignabil, 3 este atribuit rezultatului condiției.
Când condiția $ este adevărată, înseamnă că $ a = 2 = 3 dând $ a = 3
Când $ condiție este falsă acest lucru înseamnă $ a = $ 3, care a = 3
Modul corect de a scrie acest lucru este
$a = $condition ? 2 : 3;
În general, ar trebui să renunți la obișnuința de a folosi condiționate pentru a face o sarcină, ca în exemplul original - este un fel de lucru care duce la Perl obținerea unei reputații pentru a fi scris numai.
O regulă bună este că condiționările sunt doar pentru valori simple, niciodată expresii cu efecte secundare. Când tu sau altcineva trebuie să citești acest cod de opt luni de acum, ai prefera să citești așa?
$x < 3 ? foo($x) : bar($y);
Sau așa?
if ($x < 3) {
$foo($x);
} else {
$bar($y);
}