Come posso passare gli elementi in un riferimento di matrice Perl come argomenti separati ad una subroutine?

StackOverflow https://stackoverflow.com/questions/2088310

  •  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])?

È stato utile?

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
scroll top