Perl如何打印哈希内嵌套数组元素 修复全局符号访问报错
问题场景
需要解析打印多维结构的API返回内容,初始编写的Perl代码如下:
use strict; use warnings; use Data::Dumper; my $content={ 'school_set' => 'SSET1234', 'result' => [ { 'school_name' => 'school_abc', 'display_value' => 'IL25', 'school_link' => 'example.com', 'status' => 'registerd', 'status_message' => 'only arts', 'school_id' => '58c388d40596191f', } ], 'school_table' => 'arts_schools' }; print "school_name is=".$content{result}[0]{school_name}; print "school_status is=".$content{result}[3]{status};
运行代码后抛出如下报错:
Global symbol "%content" requires explicit package name (did you forget to declare "my %content"?) at test8.pl line 20. Global symbol "%content" requires explicit package name (did you forget to declare "my %content"?) at test8.pl line 21.
目标输出格式为:
school_name = school_abc school_status = registered
问题根因
代码存在两处核心错误:
$content是哈希引用类型的标量变量,原代码错误使用普通哈希%content的键访问语法,Perl中访问引用的内部元素需要使用解引用箭头->result字段对应的值是数组引用,当前数组内仅存在索引为0的1个元素,原代码使用索引3访问不存在的元素,无法获取正确值- 额外细节:原测试数据中
status字段值拼写为registerd,和预期要求输出的registered存在拼写差异,若要完全匹配输出需要修正该字段值
正确实现代码
use strict; use warnings; use Data::Dumper; my $content={ 'school_set' => 'SSET1234', 'result' => [ { 'school_name' => 'school_abc', 'display_value' => 'IL25', 'school_link' => 'example.com', # 修正原字段拼写,匹配预期输出 'status' => 'registered', 'status_message' => 'only arts', 'school_id' => '58c388d40596191f', } ], 'school_table' => 'arts_schools' }; # 哈希/数组引用访问使用->,数组取存在的0索引元素 print "school_name = ".$content->{result}[0]{school_name}."\n"; print "school_status = ".$content->{result}[0]{status}."\n";
运行结果
执行上述代码后将输出符合预期的结果:
school_name = school_abc school_status = registered
若业务场景不允许修改原接口返回的字段值,最终输出的status值会保留原数据的拼写
registerd,可根据实际需求调整。
内容的提问来源于stack exchange,提问作者Rasheed Mohammed
相关产品推荐
相关产品推荐

