El paso de parámetros a una función siempre es una lista de escalares.
Lo que pasa es que cuando ponemos
funcion(@array1, @array2, @array3);Perl realiza un "despliegue" de todos los elementos de todos los arreglos y los manda como un conjunto de elementos, al
@_ de la funcion(). Y entonces no sabes qué elementos corresponden a qué
array.
La solución es la misma que en lenguaje C (y en otros muchos lenguajes): pasar la "referencia" de los
array:
funcion(\@array1, \@array2, \@array3);Ahora la funcion() recibe 3 valores: las referencias a los 3 arreglos.
Dentro de la funcion(), podremos ahora referirnos al contenido de cada uno de ellos:
Using perl Syntax Highlighting
sub funcion
() {
my $array1_ref = $_[0
];
my $array2_ref = $_[1
];
my $array2_ref = $_[2
];
print "Elemento segundo del tercer arreglo: ", $array3_ref->[1], "\n";
# Podemos modificar los elementos de los arreglos originales:
$array1_ref->[2
] = 12;
# Otra forma de acceso: copiar los elementos de los arreglos a arreglos privados
my @array1 = @{$array1_ref};
print "Primer elemento del primer arreglo: $array1[0], "\n";
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
A la hora de devolver los resultados, se puede seguir la misma estrategia:
Using perl Syntax Highlighting
sub funcion_que_devuelve_dos_arreglos
() {
my @arreglo1 = (1
.. 10
);
my @arreglo2 = ('a' .. 'f');
return \@arreglo1, \@arreglo2;
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En la llamada a la función, solo tenemos que acordarnos que lo que recibimos son referencias, así que hay que leerlas de forma especial:
Using perl Syntax Highlighting
my ($array1_ref, $array2_ref) = funcion_que_devuelve_dos_arreglos
();Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
y luego podemos acceder directamente a sus contenidos (como se ha visto en la funcion() anterior) o sacar una copia en otro arreglo:
Using perl Syntax Highlighting
my @arreglo1 = @{$array1_ref};Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4