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

前端之家收集整理的这篇文章主要介绍了数组 – 如何在Perl中使用数组作为内置函数(sprintf,join等)的参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个如下数组:

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

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

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

say sprintf(@a);       #=> 3

我也尝试了这个,当然没有用:

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

某些语言的splat语法在这里也不起作用(我现在只是猜测):

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

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

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

解决方法

sprintf有原型$@,而不是@,所以传递给它的第一个参数是在标量上下文中计算的.

用&前缀一个子呼叫忽略原型,但你必须使用内置的全名作为子调用

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

或明确传递第一个参数:

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

猜你在找的Perl相关文章