Как я могу передать элементы в ссылке на массив Perl как отдельные аргументы подпрограмме?

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

Например, предположите, что у меня была эта функция:

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

И скажем, я имею:

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

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

6
задан brian d foy 18 January 2010 в 22:43
поделиться

5 ответов

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

foo(@$args)

Это на самом деле не является функцией . Этот синтаксис просто разыгрывает справочник массива обратно на простой массив. Человек Perlref рассказывает вам больше о направлениях.

9
ответ дан 8 December 2019 в 03:00
поделиться

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

foo( @$args );

Или, если вы хотите быть более откровенным:

foo( @{ $args } );
10
ответ дан 8 December 2019 в 03:00
поделиться

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

foo(@$args);
6
ответ дан 8 December 2019 в 03:00
поделиться
foo(@$args);

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

my $func = \&foo;
...
$func->(@$args);
4
ответ дан 8 December 2019 в 03:00
поделиться

Это просто. foo (@ {$ args})

2
ответ дан 8 December 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: