我有一个3维哈希,我需要在其中提取数据。我需要在vuln_soft->下提取名称和供应商。刺。到目前为止,我设法提取" 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'
}
}
}
}
答案 0 :(得分:1)
首先,要初始化哈希,请使用my %hash = (...);
(注意parens,而不是花括号)。使用{}
声明您已完成的哈希引用。您应始终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运算符->
。