perl 获取函数返回的列表的第一项

dfuffjeb  于 2023-01-31  发布在  Perl
关注(0)|答案(3)|浏览(208)

问题的简单模拟:

use strict;
use warnings;

sub uniq
{
  my %seen;
  grep !$seen{$_}++, @_;
}

my @a = (1, 2, 3, 1, 2);

print shift @{uniq(@a)};

使用“严格引用”时,不能将字符串(“3”)用作ARRAY引用

gg0vcinb

gg0vcinb1#

需要在函数调用上施加一个列表上下文,然后从列表中选取第一个元素。
print或任何其他子例程调用已经提供了一个列表上下文。

print +( func(@ary) )[0];

这将忽略列表的其余部分。
+是必需的(尝试不使用它),除非我们在print本身的所有参数周围都加上括号,即

print( (func(@ary))[0] );
nnsrf1az

nnsrf1az2#

一个选项可以是返回数组引用:

sub uniq {
  my %seen;
  [grep !$seen{$_}++, @_];
}
nxowjjhe

nxowjjhe3#

如果uniq返回了一个数组引用,那么@{uniq(...)}将是获取数组的正确习惯用法(这是shift的合适参数)。对于更一般的列表,可以将列表强制转换为数组引用,然后取消引用它。

print shift @{ [ uniq(@a) ] };

相关问题