Как я могу передать элементы в ссылке на массив Perl как отдельные аргументы для подпрограммы? - PullRequest
6 голосов
/ 18 января 2010

У меня есть список, содержащий аргументы, которые я хочу передать функции. Как мне вызвать эту функцию?

Например, представьте, что у меня есть эта функция:

sub foo {
  my ($arg0, $arg1, $arg2) = @_;
  print "$arg0 $arg1 $arg2\n";
}

И скажем, у меня есть:

my $args = [ "la", "di", "da" ];

Как мне позвонить foo без записи foo($$args[0], $$args[1], $$args[2])?

Ответы [ 5 ]

10 голосов
/ 18 января 2010

Вы разыменовываете ссылку на массив, вставляя перед ней @.

foo( @$args );

Или если вы хотите быть более явным:

foo( @{ $args } );
9 голосов
/ 18 января 2010

Это должно сделать это:

foo(@$args)

На самом деле это не apply функция. Этот синтаксис просто разыменовывает ссылку на массив обратно в обычный массив. man perlref расскажет вам больше о ссылках.

6 голосов
/ 18 января 2010

Попробуйте это:

foo(@$args);
4 голосов
/ 18 января 2010
foo(@$args);

Или, если у вас есть ссылка на foo:

my $func = \&foo;
...
$func->(@$args);
2 голосов
/ 18 января 2010

Все просто. Foo (@ {$ арг})

...