我的哈希看起来像这样:
$VAR1 = {
'1238' => {
'OUT3FA_5' => 65,
'SEV' => '3_major',
'OUT3A_5' => 20,
'OUT3-Fix' => 45,
'IN1' => 85
},
'1226' => {
'OUT3FA_5' => 30,
'SEV' => '4_minor',
'OUT3A_5' => 5,
'OUT3-Fix' => 25,
'IN1' => 40
},
'1239' => {
'OUT3FA_5' => 56,
'SEV' => '4_minor',
'OUT3A_5' => 34,
'OUT3-Fix' => 22,
'IN1' => 94
}]
Run Code Online (Sandbox Code Playgroud)
我希望我的Perl脚本只返回对应于"SEV"="4_minor"的值.在这种情况下,它将返回:
'1226' => {
'OUT3FA_5' => 30,
'SEV' => '4_minor',
'OUT3A_5' => 5,
'OUT3-Fix' => 25,
'IN1' => 40
},
'1239' => {
'OUT3FA_5' => 56,
'SEV' => '4_minor',
'OUT3A_5' => 34,
'OUT3-Fix' => 22,
'IN1' => 94
}
Run Code Online (Sandbox Code Playgroud)
但是当我像这样使用grep时:
my $Sev_Logged = "4_minor";
my $node_hash = {
Week => [
grep { $hash{$_}{'SEV'} eq $Sev_Logged } %hash,
]
};
# Print in json format
my $json = encode_json \%$node_hash;
print $json;
Run Code Online (Sandbox Code Playgroud)
它只返回:
{"Week":["1226","1239"]}
Run Code Online (Sandbox Code Playgroud)
并且我希望它返回与包含SEV ="4_minor"的每个周相对应的所有其他数据.我怎样才能做到这一点?任何帮助将非常感激.
当你%hash通过这种方式移交时,grepPerl将散列解释为偶数编号的键和值列表 - 导致grep {...}为每个键调用一次块,为每个值调用一次(而不是为每对调用一次)核心价值).
尝试这样的事情:
{ map { ($_ => $hash{$_} } grep { $hash{$_}->{SEV} eq $Sev_Logged } keys %hash }
Run Code Online (Sandbox Code Playgroud)
在grep保持了其在这些哈希键SEV字段,你想要的东西相匹配.在map后来重建的哈希(因为在那一刻,我们只有从返回键grep),最后我们把它转换成一个散列引用.
| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |