如何将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])
?
答
+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})
'APPLY'从哪里来?这是另一种语言的结构吗? – daotoad 2010-01-18 19:26:22
APPLY来自LISP http://nostoc.stanford.edu/jeff/llisp/21.html – 2010-01-18 20:32:20
@daotoad来自Lisp,但大多数语言都有它们的等价形式。对于谷歌来说,这是非常困难的事情之一,因为各种语言为相同的事情组成了不同的术语。 – 2010-01-18 22:11:43