Using perl Syntax Highlighting
#!/usr/bin/perl -l
use strict
;
use warnings
;
package Q
;
sub hidden
{
# print join "\n", @_;
while ( $_ = shift ) {
if ( /^-/ ) {
my $parametro = $_;
my $valor = ( $parametro eq '-default' ) ? join(q{,},@_) : sh
print "$parametro : $valor";
}
}
}
package main
;
my @array_materiales = qw(pincho tornillo tuerca
);
Q
::hidden(-name
=> 'array_materiales', -default
=> @array_materiales, );Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Al pasar un array, Perl lo 'despliega', por lo que la función recibe todos los elementos del array como si hubiesen sido pasados uno a uno.
Es un poco peligroso porque podríamos mezclar los elementos del array con otros elementos que le estemos pasando a la función, como los del ejemplo, que tienes '-name' y '-default'.
En este caso se puede hacer porque has colocado el array como ÚLTIMO valor a pasar a la función. Perl 'despliega' todos los valores en esa posición, por lo que la función hidden asume que no hay más posibles parámetros después, sino que el parámetro '-default' marca el inicio de la lista de valores de un array. Por eso he puesto un
join de todos los valores restantes.
Como ves, es cómodo pasar un array, pero peligroso porque tenemos que acordarnos que después de él no podemos indicar ningún argumento más. Tenemos que ponerlo siempre el último de todos los parámetros pasados a la función.
Sería mejor sustituir el paso de un array 'desplegado' por el de una referencia a él. Así pasas solo un argumento (más rápido) y es independiente de la posición dentro de la lista de argumentos.