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

如何从Perl数组中取出哈希?代码无输出问题排查

问题分析与修正

你的代码存在三个关键错误,导致无法输出预期的bb:

1. 哈希初始化错误

my %x = {}; 是错误写法。Perl中{}创建的是哈希引用(标量类型),而哈希变量%x需要接收键值对列表。正确的空哈希初始化方式是:

my %x; # 直接声明,简洁高效
# 或者 my %x = ();

原代码会把哈希引用转换成字符串(如HASH(0xabc123))作为哈希的唯一键,对应值为undef,后续$x{'aa'} = 'bb';只是新增了另一个键值对,完全偏离了你的预期。

2. 哈希存入数组的方式错误

push(@items, $x); 中的$x是哈希的符号引用,并非正确的存储方式。如果要把整个哈希存入数组,应该存储哈希引用:

push(@items, \%x); # 用\%x获取哈希的引用

如果直接push%x,Perl会把哈希展开成键值对列表(比如'aa', 'bb'),数组最终会变成('aa', 'bb'),而非包含哈希的数组。

3. 从数组取出哈希的错误

my %i = @items[0]; 是错误的解引用方式。数组里存的是哈希引用,需要用%{$items[0]}来解引用为哈希:

my %i = %{$items[0]};

原代码中@items[0]是单元素数组切片,等同于$items[0],直接把标量赋值给哈希变量,会导致哈希只有一个键(标量的字符串形式),值为undef,自然无法输出bb。


修正后的完整代码:

my @items = ();
my %x; # 正确初始化哈希
$x{'aa'} = 'bb';
push(@items, \%x); # 存入哈希引用
my %i = %{$items[0]}; # 正确解引用
print $i{'aa'}; # 输出bb

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:15:38