Perl嵌套结构

Perl嵌套结构,perl,Perl,我有一个关于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

我有一个关于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嵌套结构(散列引用、数组引用等)的任何好的参考资料吗

提前感谢您

尝试这样做:

print $data1->[1]->{name}; # ARRAY ref
print $data3->{2}->{name}; # HASH ref
这是从perl数组和HASH ref中取消引用

->
将显式取消引用。仅在第一层需要,例如:

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

就像克里斯·查利说的,看看


要帮助您理解标量引用的外观,请使用,例如:

应输出:

$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
                 }
        };

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

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


你知道Data::Dumper吗?是的,但是我尝试不使用模块来实现这一点,这对于像你这样的复杂数据结构来说可能是一个很好的开始。我不确定那些
+
在那里做什么<代码>+在大括号可以作为代码块而不是匿名哈希引用的地方消除歧义,但很少有人需要这样做。我猜代码包含它们是出于一种错误的愿望,即希望清晰一致,与可能模棱两可的地方保持一致。非常感谢!它现在已经印出来了,根据你给出的答案,我不知怎么知道这些是什么东西,你不必总是明确地去引用。在第一个
->
之后,使用更多它们来取消引用是可选的-
$data1->[1]{name}
相当于
$data1->[1]->{name}
。顺便说一句,我真的不喜欢perldsc,它是一个为每种情况提供食谱的拐杖。为了真正理解参考文献,我喜欢向人们指出,这些参考文献使其清晰明了。
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
                 }
        };