Bueno, todos hacen cosas diferentes.
Sin embargo, todos los demás factores son iguales,
push @list, 'foo' if $foo;
es la declaración que transmite su significado más directamente, por lo que debe preferirse.
Si tiene que pausar y pensar acerca de una declaración que supuestamente hace algo tan simple como pulsar un elemento de matriz, está haciendo algo mal.
my @list = (
$foo ? 'foo' :(),
$bar ? 'bar' :(),
);
podría estar bien si esto es parte de alguna inicialización colosal que se está realizando en otro lugar.
Creo que usando
my @list = (
('foo') x!! $foo,
('bar') x!! $bar,
);
indica que el programador tiene — cómo puedo poner esto? — issues.
Por cierto, no existe el operador compuesto x!!
. El !!
es double logical negation. Convierte un valor falso arbitrario a un valor definido pero falso (la cadena vacía) que produce 0
cuando se usa donde perl
espera un número. Un valor verdadero se convierte a 1
. Aquí, !!
opera en $foo
y $bar
y escribirlo x!! $foo
ofusca innecesariamente el significado del código.
x
es el repetition operator. Así,
('foo') x !!$foo;
significa repetición ('foo')
una vez o ninguna en absoluto, dependiendo de si $foo
es verdadera o falsa, respectivamente.
PD: Por supuesto, resultó que había un PerlMonks article que introducía el llamado list boolean list squash operator. Leí el article y no me pareció convincente.
Sólo una nota, que no está usando alguna de estas cadenas como referencias de variables, ¿verdad? No '$ {$ list [0]}'? Esto se parece sospechosamente a un hash para mí. –
Las preguntas del tipo de encuesta deberían CW. –
@Chris: No. Usé cadenas solo por simplicidad. –