如何将Perl数组引用中的元素作为独立参数传递给子例程?

问题描述:

我有一个列表,其中包含我想传递给函数的参数。我如何调用该功能?如何将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])

+2

'APPLY'从哪里来?这是另一种语言的结构吗? – daotoad 2010-01-18 19:26:22

+3

APPLY来自LISP http://nostoc.stanford.edu/jeff/llisp/21.html – 2010-01-18 20:32:20

+1

@daotoad来自Lisp,但大多数语言都有它们的等价形式。对于谷歌来说,这是非常困难的事情之一,因为各种语言为相同的事情组成了不同的术语。 – 2010-01-18 22:11:43

这应做到:

foo(@$args) 

这实际上不是一个apply功能。该语法只是将数组引用解引用回普通数组。 man perlref告诉你更多关于推举的信息。

+0

你也可以考虑不构建开始的引用,即'@args =(“la”,“de”,“dah”)或者@args = qw(la de dah);'然后传递它用'foo(@args)'。这比参考舞蹈更清洁,更直接,但如果你有其他限制(例如数组已经是数据结构的一部分),这不是什么大问题。 – fennec 2010-01-19 01:01:13

试试这个:

foo(@$args); 

您通过在前面粘贴@来取消引用数组引用。

foo(@$args); 

或者,如果你想更明确的:

foo(@{ $args }); 

foo(@$args); 

或者,如果你有foo参考:

my $func = \&foo; 
... 
$func->(@$args); 

很简单。 foo(@ {$ args})