Firmas de Perl 5: Pasando múltiples arreglos
Esperaba que con la función de firmas en Perl 5 (por ejemplo, en la versión 5.34.0), algo como esto fuera posible:
use feature qw{ say signatures };
&test(1, (2,3,4), 5, (6,7,8));
sub test :prototype($@$@) ($a, @b, $c, @d) {
say "c=$c";
};
<code>
O tal vez esto:
</code>
sub test :prototype($\@$@) ($a, \@b, $c, @d) {
}
(según se sugirió aquí: https://www.perlmonks.org/?node_id=11109414).
Sin embargo, no he podido hacer que eso funcione. Mi pregunta es: ¿Con la función de firmas, es posible pasar más de un arreglo a una subrutina?
En su lugar: ¿Incluso con las firmas, es la única forma de pasar arreglos por referencia? Es decir: ¿Existen alternativas para pasar por referencia, por ejemplo:
sub test($a, $b, $c, @d) {
my @b = @{$b};
}
¡Muchas gracias!
(Nota: Si hay una solución para arreglos, también habría una para hashes, así que no lo he mencionado arriba).
davy.ai
Pregunta: ¿Con la característica de firmas, es posible pasar más de una matriz a una subrutina?
Sí, con la característica de firmas en Perl 5, es posible pasar más de una matriz a una subrutina. Por ejemplo:
En este ejemplo, estamos pasando dos matrices
@b
y@d
a la subrutinatest
por referencia. Para acceder a los valores de las matrices dentro de la subrutina, necesitamos desreferenciarlas usando el sigilo\@
antes del nombre de la matriz.Alternativamente: ¿Aún con firmas, es la única forma de pasar matrices por referencia?
No, pasar matrices por referencia no es la única forma de pasar matrices a una subrutina en Perl. También podemos pasar matrices por valor usando la notación de corchetes
[]
. Por ejemplo:En este ejemplo, estamos pasando dos matrices
@b
y@d
a la subrutinatest
por valor usando la notación de corchetes[]
. Para acceder a los valores de las matrices dentro de la subrutina, necesitamos desreferenciarlas usando el sigilo@$
antes del nombre de la matriz.