Perl Data :: Dumper在数组内哈希?

时间:2012-10-05 04:22:37

标签: arrays perl hash data-dumper

我有一个程序使用XML::Simple解析一些XML。它似乎在某些时候XML中有冗余的条目被序列化,但我不能在我的生活中弄清楚如何将这些数据作为一个简单的字符串返回。这个XML的一个子集似乎被XML::Simple放入一个数组中。运行Dumper($data)时,相关小节如下,其中数据是我解析的XML。

Audio = [
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      }
    ];

我将XML解析输出的一小部分传递给变量,如:

my @audiostuff = $data->{ClipContent}->{EssenceList}->{Audio};

当我输出这个转储时,我得到以下

$VAR1 = [
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      }
    ];

所有在捕获的数组中似乎都是正确的。该数组似乎有一个元素,在该元素内部有四个哈希。这是我被卡住的地方。我不知道如何让这些哈希中的信息再次出现。我尝试了大约40种不同的东西,我只是把头靠在墙上。我喜欢将每个哈希的值传递给一个简单的本地数组(例如@samplingrate),其中包含所有这四个条目,并且可以通过$samplingrate[0]简单地引用它们等等。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:6)

我相信你的意思是取消引用数组,如下:

my @audiostuff = @{ $data->{ClipContent}->{EssenceList}->{Audio} };
# do stuff with $audiostuff[0], etc.

或者只使用arrayref

my $audiostuff = $data->{ClipContent}->{EssenceList}->{Audio};
# do stuff with $audiostuff->[0], etc.

有关处理引用和数据结构的一些可记忆规则,请参阅http://perlmonks.org?node=References+quick+reference

答案 1 :(得分:1)

my @audiostuff = $data->{ClipContent}->{EssenceList}->{Audio};

您必须使用for循环遍历数组。

以下是如何访问它

    $audiostuff[0]->{'AudioIndex'}  # This will give you hashref

     # Below will give you value 32768, Similarly you can get value for 'DataSize' 

    $audiostuff[0]->{'AudioIndex'}->{'StartByteOffset'} 

    # To access other elements/values.

     $audiostuff[0]->{'SamplingRate'}

     $audiostuff[0]->{'BitsPerSample'}

     $audiostuff[0]->{'AudioFormat'} 

     # How it works is,

    $audiostuff[0] # is first element of array, 

    $audiostuff[0]->{'AudioIndex'} # -> is used because element we get 
above is hash reference and then we get value at key 'AudioIndex'.

     # Similarly for 

$audiostuff[0]->{'AudioIndex'}->{'StartByteOffset'}