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 运算符 ->
。
我有一个 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 运算符 ->
。