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

Perl多级哈希遍历问题咨询:如何正确打印内层哈希键值对

解决方法

错误原因

  • 第一版遍历输出HASH(XXXXXX):因为$switchportinfo{$key}->{$ele}存储的是CSV行数据的哈希引用,直接打印引用只会输出内存地址,需要解引用后遍历内部的键值对。
  • 第三版代码报错:内层遍历的keys %{switchportinfo{$key}{$ele}}存在语法错误,访问哈希%switchportinfo的嵌套元素时缺失了变量前缀$,Perl会将其识别为哈希切片而非哈希引用,不符合keys函数的参数要求。

正确遍历代码

基础修正版

for my $key (keys %switchportinfo) 
{
    print "$key: \n";
    for my $ele (keys %{$switchportinfo{$key}})
    {   
        print "  $ele: \n";
        # 仅补充缺失的$符号即可修复报错
        for my $ele2 (keys %{$switchportinfo{$key}{$ele}}) {
            print "    $ele2: " . $switchportinfo{$key}{$ele}->{$ele2}. "\n";
        }
    }
}

可读性优化版

可以将每层的哈希引用提前赋值给临时变量,降低嵌套语法的出错概率:

for my $switch_name (keys %switchportinfo) {
    print "$switch_name:\n";
    my $ports_ref = $switchportinfo{$switch_name};
    for my $port (keys %$ports_ref) {
        print "  $port:\n";
        my $port_attrs = $ports_ref->{$port};
        for my $attr_name (keys %$port_attrs) {
            print "    $attr_name: $port_attrs->{$attr_name}\n";
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:36:06