3

我对 Perl 中的复杂结构有疑问

my $data1 = [
  +{ id => 1, name => 'A' },
  +{ id => 2, name => 'B' },
  +{ id => 3, name => 'C' },
];

my $data3 = +{
   1 => +{ id => 1, name => 'A' },
   2 => +{ id => 2, name => 'B' },
   3 => +{ id => 3, name => 'C' },
};

我应该如何打印“B”?那是什么样的数据结构?还有任何易于理解的关于 Perl 嵌套结构(散列引用、数组引用等)的很好的参考资料?

先感谢您

4

1 回答 1

6

尝试这样做:

print $data1->[1]->{name}; # ARRAY ref
print $data3->{2}->{name}; # HASH ref

这是从 perl ARRAY 和 HASH ref取消引用。

显式-> 取消引用。只有第一层“楼层”才需要它,例如:

print $data1->[1]{name};
print $data3->{2}{name};

也可以。第二个和更多是可选的。

就像 Chris Charley 说的,看看关于数据结构的教程


为了帮助您了解标量 ref 的外观,请使用Data::Dumper,例如:

print Dumper $data1;
print Dumper $data3;

应该输出:

$VAR1 = [
          {
            'name' => 'A',
            'id' => 1
          },
          {
            'name' => 'B',
            'id' => 2
          },
          {
            'name' => 'C',
            'id' => 3
          }
        ];
$VAR1 = {
          '1' => {
                   'name' => 'A',
                   'id' => 1
                 },
          '3' => {
                   'name' => 'C',
                   'id' => 3
                 },
          '2' => {
                   'name' => 'B',
                   'id' => 2
                 }
        };

对于+{ }语法,rra给出了很好的响应:

在可以将大括号视为代码块而不是匿名哈希引用的地方消除歧义,但很少需要这样做。我猜代码包含它们是出于一种错误的愿望,即清晰并与可能模棱两可的地方保持一致。

于 2013-03-21T00:15:54.337 回答