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

Perl 5.26中“Experimental keys on scalar”报错的无临时哈希改写咨询

Perl 5.26+ 无临时哈希变量的数组去重方案

方案1:哈希引用解引用

直接对匿名哈希引用做解引用操作,让keys能识别为哈希类型,改写后的代码:

@a = keys %{{ map { $_ => undef } @a }};

解释:{ map { $_ => undef } @a }生成匿名哈希引用,%{}将其解引用为哈希,这样keys就能正常获取去重后的键,完全符合新版本Perl的语法要求,同时不需要单独声明临时哈希变量。

方案2:使用state变量的grep写法

利用Perl 5.10及以上支持的state关键字,在grep内部声明只初始化一次的哈希,实现无临时变量去重:

@a = grep { state %seen; !$seen{$_}++ } @a;

解释:state %seen会让这个哈希在grep的整个执行过程中保持状态,不会每次迭代都重新初始化,既避免了单独的临时哈希变量,又实现了去重逻辑,代码更简洁。

报错原因说明

你遇到的错误是因为Perl 5.20之后移除了keys作用于标量(哈希引用)的实验性特性,5.18时这个特性还处于实验阶段允许使用,但5.26正式禁止,所以必须通过解引用或其他合法方式传递哈希给keys。

内容的提问来源于stack exchange,提问作者U. Windl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:42:02