Perl-从多级哈希中获取哈希值

Perl- Get Hash Value from Multi level hash

我有一个 3 维散列,我需要从中提取数据。我需要在 vuln_soft-> prod 下提取名称和供应商。到目前为止,我设法使用以下代码提取 "cve_id":

foreach my $resultHash_entry (keys %hash){
    my $cve_id = $hash{$resultHash_entry}{'cve_id'};
}

有人可以提供有关如何提取名称和供应商的解决方案吗?提前致谢。

%hash = {
    'CVE-2015-6929' => {
        'cve_id'    => 'CVE-2015-6929',
        'vuln_soft' => {
            'prod' => {
                'vendor' => 'win',
                'name'   => 'win 8.1',
                'vers'   => {
                    'vers' => '',
                    'num'  => ''
                }
            },            
        'prod' => {
            'vendor' => 'win',
            'name'   => 'win xp',
            'vers'   => {
                'vers' => '',
                'num'  => ''
            }
        }
    },
    'CVE-2015-0616' => {
        'cve_id'    => 'CVE-2015-0616',
        'vuln_soft' => {
            'prod' => {
                'name'   => 'unity_connection',
                'vendor' => 'cisco'
            }
        }
    }
}

首先,要初始化散列,请使用 my %hash = (...);(注意括号,而不是大括号)。使用 {} 声明一个散列引用,您已经完成了。你应该总是 use strict;use warnings;.

回答问题:

for my $resultHash_entry (keys %hash){
    print "$hash{$resultHash_entry}->{vuln_soft}{prod}{name}\n";
    print "$hash{$resultHash_entry}->{vuln_soft}{prod}{vendor}\n";
}

...可以稍微简化为:

for my $resultHash_entry (keys %hash){
    print "$hash{$resultHash_entry}{vuln_soft}{prod}{name}\n";
    print "$hash{$resultHash_entry}{vuln_soft}{prod}{vendor}\n";
}

因为 Perl 总是确定任何比第一个条目更深的条目总是引用,所以这里不需要 deref 运算符 ->