El ternario "?:" es el operador condicional, al igual que en C. Funciona
como un if-then-else. Si el argumento que está antes del ? es verdadero,
se devuelve el argumento que está antes del :, sino se devuelve el argumento
después del :.
Por ejemplo:
printf "Tengo %d perro%s.\n", $n,
($n == 1) ? "" : "s";
Contexto escalar o lista es propagado hacia adelante, en el segundo o
tercer argumento, cualquiera que sea el seleccionado.
$a = $ok ? $b : $c; # obtiene un escalar
@a = $ok ? @b : @c; # obtiene un array
$a = $ok ? @b : @c; # ¡oops, esto solo cuenta!
El operador puede ser asignado si tanto el segundo y tercer argumentos son
valores-izquierda legales (lo que significa que se les puede asignar
valores):
($a_or_b ? $a : $b) = $c;
Debido a que este operador produce un resultado asignable, usar
asignaciones sin paréntesis hará que se meta en problemas. Por ejemplo,
esto:
$a % 2 ? $a += 10 : $a += 2
En realidad significa lo siguiente:
(($a % 2) ? ($a += 10) : $a) += 2
En lugar de esto:
($a % 2) ? ($a += 10) : ($a += 2)
Esto, probablemente, se debería escribir de forma más sencilla como:
$a += ($a % 2) ? 10 : 2;
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4