我有一个从json检索的散列的散列,我试图拼凑散列,组和打印值。也就是说,对于每个key1组中的所有键和相应的值。试图使用下面的代码在perl中实现这一点,但是它打印每个ID和名称的个别值,但不是分组值。你能帮我怎么分组和打印键和值。散列的perl散列 - 对于eacy键组的内部键和相应的值
数据:
VAR1= {
'ID1' => {'Name1' => {'Address1' => {'Mod1' => ['pol1']}},
Name2' => {'Address1' => {'Mod2' => ['pol2']}}},
'ID2' => {'Name3' => {'Address3' => {'Mod3' => ['pol3']}}},
'ID3' => {'Name4' => {'Address4' => {'Mod4' => ['pol1, pol2, pol3']}}}
}
预期输出:
ID1 => [Name1,Address1,mod1(pol1), Name2,Address1,mod2(pol2)],
ID2 => [Name3,Address3,mod3(pol3)],
ID3 => [Name4,Address4,mod4(pol1,pol2,pol3)]
代码1:
for my $id (@id_list) {
foreach my $item (sort (slurp(\%{$new{$id}}))) {
my $data = join(',', @$item);
print "data.. $data\n";
push(@results,$data);
}
}
print map {"$_"} @results;
代码2:
foreach my $id (sort keys %new){
foreach my $name (keys %{$new{$id} }) {
foreach my $address (keys %{$new{$id}{$name}}) {
foreach my $mod (keys %{$new{$id}{$name}{$address}) {
foreach my $value (@{$new{$id}{$name}{$address}{$mod}}) {
my $sp = ":";
my $reasons = join(',',$id,$name,$address,$mod,$value.$sp);
push (@rea, $reasons);
}
}
}
}
}
你能澄清你的预期产出吗?你看起来像一个散列,键是原始的顶级键和值是数组引用 - 但“_mod(pol)_”不适合。 – zdim
@zdim,如果我理解正确,你说mod(pol)不是关键和价值。是的,你是正确的,它是一套顶级的关键和值列表。我的$值((@ {$ new {$ id} {$ name} {$ address} {$ mod}})正在返回相应“mod”的期望“pol”值 – Sampath
您的第二个代码几乎是正确的 - 它在'$ mod'循环中缺少'}',并且它没有在最内层循环中汇编所有数组值。如果你想要一个带有array-ref的散列值,那么究竟是什么“_mod1(pol1)_” ?这是否意味着是一个含有该内容的字符串,''mod1(pol1)''?写入的内容不是有效的Perl – zdim