es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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).

Tags:  , ,

Answer

  1. Avatar for 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:

    use feature qw{ say signatures };
    
    test(1, [2,3,4], 5, [6,7,8]);
    
    sub test($a, \@b, $c, \@d) {
        say "c=$c";
        say "b=@b";
        say "d=@d";
    }
    

    En este ejemplo, estamos pasando dos matrices @b y @d a la subrutina test 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:

    use feature qw{ say signatures };
    
    test(1, [2,3,4], 5, [6,7,8]);
    
    sub test($a, $b, $c, $d) {
        my @b = @$b;
        my @d = @$d;
        say "c=$c";
        say "b=@b";
        say "d=@d";
    }
    

    En este ejemplo, estamos pasando dos matrices @b y @d a la subrutina test 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.

Comments are closed.