Perl Data :: Dumper在数组内散列?

szu*_*ins 3 arrays perl hash data-dumper

我有一个程序,使用解析一些XML XML::Simple.它似乎在某些时候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'
      }
    ];
Run Code Online (Sandbox Code Playgroud)

我将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'
      }
    ];
Run Code Online (Sandbox Code Playgroud)

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

任何帮助,将不胜感激.

yst*_*sth 6

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

my @audiostuff = @{ $data->{ClipContent}->{EssenceList}->{Audio} };
# do stuff with $audiostuff[0], etc.
Run Code Online (Sandbox Code Playgroud)

或者只是使用arrayref

my $audiostuff = $data->{ClipContent}->{EssenceList}->{Audio};
# do stuff with $audiostuff->[0], etc.
Run Code Online (Sandbox Code Playgroud)

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