哈希在数组中哈希

时间:2015-02-19 16:55:13

标签: arrays perl data-structures hash perl-data-structures

我试图识别Data::Dumper的输出,当我在某些代码中使用哈希时,它会产生下面的输出我尝试修改:

print Dumper(\%unholy_horror);
$VAR1 = {
      'stream_details' => [
                            {
                              'file_path' => '../../../../tools/test_data/',
                              'test_file' => 'test_file_name'
                            }
                          ]
    };

这是哈希内部数组中的哈希吗?如果不是这样的话?以及访问"文件路径"的语法是什么?和" test_file"键和它们的值。

我想像下面那样迭代内部哈希,我该怎么做?

while ( ($key, $value) = each %hash )
{
    print "key: $key, value: $hash{$key}\n";
}

1 个答案:

答案 0 :(得分:2)

你是对的。它是散列中数组中的散列。

my %top;
$top{'stream_details'}[0]{'file_path'} = '../../../../tools/test_data/';
$top{'stream_details'}[0]{'test_file'} = 'test_file_name';

print Dumper \%top;

您可以访问上面的元素,或者使用3级for循环进行迭代 - 假设您想要迭代整个事物。

foreach my $topkey ( keys %top ) { 
   print "$topkey\n";
   foreach my $element ( @{$top{$topkey}} ) {
       foreach my $subkey ( keys %$element ) { 
           print "$subkey = ",$element->{$subkey},"\n";
       }
   }
}

我想补充一下 - 有时你会因为解析XML或JSON而得到一些非常奇怪的看似散列拓扑。可能值得一看,看看是否发生了什么,因为'工作'使用已解析的对象可能更容易。

以上可能是:

的结果
#JSON
{"stream_details":[{"file_path":"../../../../tools/test_data/","test_file":"test_file_name"}]}

或类似于API的类似内容。 (我认为它不可能是XML,因为XML并不像JSON那样含蓄地拥有'数组)。