如何在Perl中使用数组作为内置函数(sprintf,join等)的参数?

时间:2015-11-24 15:38:46

标签: arrays perl

我有一个如下数组:

my @a = ('%d %d', 10, 20);

我想使用此数组的元素作为函数的参数。

如果我只是尝试直接使用它,它会在标量上下文中解释:

say sprintf(@a);       #=> 3

我也试过这个,当然没有成功:

@_ = @a; say sprintf;  #=> Not enough arguments...

某些语言的splat语法在这里也没有用(我此时只是猜测):

say sprintf(*@a);      #=> (error)

其他内置函数也会出现同样的问题,例如join

有没有办法获取任意数组(长度未知)和任意函数,并使用数组元素作为函数的参数调用函数?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:7)

sprintf包含原型$@,而不是@,因此传递给它的第一个参数在标量上下文中进行评估。

使用&前缀子调用会忽略原型,但您必须使用内置函数的全名作为子调用:

say &CORE::sprintf(@a); # Perl 5.16+

或明确传递第一个参数:

say sprintf($a[0], @a[1..$#a]);