如何访问'无密钥'匿名哈希

时间:2013-02-27 18:49:07

标签: perl

我的perl脚本产生一个可变的,具有以下Data :: Dumper输出。

$VAR1 = [
  {
    'displayName' => 'unconfirmed',
    'tagName' => 'unconfirmed'
  },
  {
    'displayName' => 'new',
    'tagName' => 'new'
  },
  {
    'displayName' => 'started',
    'tagName' => 'started'
  },
  {
    'displayName' => 'reopened',
    'tagName' => 'reopened'
  },
  {
    'displayName' => 'resolved',
    'tagName' => 'resolved'
  }
];

重新创建此输出的perl代码如下所示:

my $foo = ([
  {
    'displayName' => 'unconfirmed',
    'tagName' => 'unconfirmed'
  },
  {
    'displayName' => 'new',
    'tagName' => 'new'
  },
  {
    'displayName' => 'started',
    'tagName' => 'started'
  },
  {
    'displayName' => 'reopened',
    'tagName' => 'reopened'
  },
  {
    'displayName' => 'resolved',
    'tagName' => 'resolved'
  }
]);
print Dumper($foo);

问题A:如何访问内容?

thanx的帮助!以下是如何访问结构的示例。

for my $item (@{$foo}) {
    print $item->{tagName};
}

问题B:对语言上下文有什么好的参考:哈希,数组,不同括号的含义等?

注意:结构本身是几个soap调用的结尾,xpath(SOM->valueof)和直接引用($som->{tag1}->{tag2}),但我希望这个问题是更容易提问和回答。

3 个答案:

答案 0 :(得分:4)

Perl不会创建无密钥哈希。你在$ foo看到的是一个数组引用,所以你必须做print $foo->[$_]{displayName} for 0 .. $#{$foo}

好吧,至于参考,你不需要那个,你需要一个完整的介绍文本。请参阅http://perl-tutorial.org

答案 1 :(得分:3)

回答A:

由于您已使用散列和数组的引用(它们是标量),因此您应该取消引用标量以访问元素。

例如,如果您愿意访问第三个哈希,则可以将其作为:

访问
$foo->[2]->{"displayName"}; # accesses 'started'
$foo->[2]->{"tagName"}; # accesses 'started'

回答B:

有关参考资料,请参阅this

答案 2 :(得分:0)

学习像这样的复杂Perl数据结构的良好开端是Data Structures Cookbook,它包含在每个Perl安装中(在命令行上键入perldoc perldsc)。