Come posso passare gli elementi in un riferimento di matrice Perl come argomenti separati ad una subroutine?
-
21-09-2019 - |
Domanda
Ho una lista che contiene argomenti voglio passare a una funzione. Come chiamare quella funzione?
Per esempio, immaginate ho avuto questa funzione:
sub foo {
my ($arg0, $arg1, $arg2) = @_;
print "$arg0 $arg1 $arg2\n";
}
E diciamo che ho:
my $args = [ "la", "di", "da" ];
Come chiamo foo
senza scrivere foo($$args[0], $$args[1], $$args[2])
?
Soluzione
Questo dovrebbe farlo:
foo(@$args)
Non è in realtà una funzione apply
. Che la sintassi appena dereference un riferimento array alla matrice semplice. uomo perlref vi dice di più su referecences.
Altri suggerimenti
dereferenziare un riferimento ad array attaccando @
di fronte ad esso.
foo( @$args );
O se si vuole essere più esplicito:
foo( @{ $args } );
Prova questo:
foo(@$args);
foo(@$args);
In alternativa, se si dispone di un riferimento a foo
:
my $func = \&foo;
...
$func->(@$args);
E 'semplice. foo (@ {$ args})
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow