You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取uniq函数返回列表首元素时出现Perl严格引用错误求助

问题解决方法

错误原因

你的uniq函数返回的是普通列表,但@{uniq(@a)}的写法存在问题:Perl在标量上下文里会把列表视为最后一个元素的值(这里是3),随后试图把这个字符串当成数组引用解引用,违反了strict refs的限制,因此触发报错。

三种修正方案

  1. 先存储为数组再取值
    把去重后的列表存入数组,再用shift获取第一个元素:
use strict;
use warnings;

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

my @a = (1, 2, 3, 1, 2);
my @uniq_a = uniq(@a);
print shift @uniq_a; 
  1. 直接通过列表索引取值(推荐)
    这是最简洁高效的方式,直接取列表的第一个元素:
use strict;
use warnings;

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

my @a = (1, 2, 3, 1, 2);
print (uniq(@a))[0]; 
  1. 转为匿名数组引用再解引用
    用[]把列表包装成匿名数组引用,再解引用后执行shift,这种写法虽能解决问题但没必要:
use strict;
use warnings;

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

my @a = (1, 2, 3, 1, 2);
print shift @{[uniq(@a)]}; 

内容的提问来源于stack exchange,提问作者Ωomega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:25:21