[英]Get the first item of the list returned by function
问题的简单模拟:
use strict;
use warnings;
sub uniq
{
my %seen;
grep !$seen{$_}++, @_;
}
my @a = (1, 2, 3, 1, 2);
print shift @{uniq(@a)};
在使用“strict refs”时不能使用字符串(“3”)作为 ARRAY ref
需要在 function 调用上施加一个列表上下文,然后从列表中选取第一个元素。
print
或任何其他子例程调用已经提供了列表上下文。 然后一种从返回列表中提取元素的方法
print +( func(@ary) )[0];
这忽略了列表中的 rest。
那个+
是必要的(不用它试试),除非我们用括号围绕它的所有 arguments 来装备print本身,即
print( (func(@ary))[0] );
一种选择是返回一个数组引用:
sub uniq {
my %seen;
[grep !$seen{$_}++, @_];
}
如果uniq
返回数组引用,那么@{uniq(...)}
将是获取数组的正确习惯用法(这是shift
的合适参数)。 对于更通用的列表,您可以将列表转换为数组引用,然后取消引用它。
print shift @{ [ uniq(@a) ] };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.