我有一个关于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' },
};
Run Code Online (Sandbox Code Playgroud)
我该如何打印"B"?那是什么样的数据结构?有关Perl嵌套结构(哈希引用,数组引用等)的任何好的参考都可以理解吗?
先感谢您
试着这样做:
print $data1->[1]->{name}; # ARRAY ref
print $data3->{2}->{name}; # HASH ref
Run Code Online (Sandbox Code Playgroud)
这是来自perl ARRAY和HASH ref的de-reference.
在-> 去参考明确.它仅用于第一个"楼层",例如:
print $data1->[1]{name};
print $data3->{2}{name};
Run Code Online (Sandbox Code Playgroud)
也工作.第二个和更多是选项.
就像Chris Charley说的那样,看看有关数据结构的教程
为了帮助您理解标量ref的外观,请使用Data :: Dumper,例如:
print Dumper $data1;
print Dumper $data3;
Run Code Online (Sandbox Code Playgroud)
应输出:
$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
}
};
Run Code Online (Sandbox Code Playgroud)
对于+{ }语法,rra给出了很好的响应:
在可以将大括号作为代码块而不是匿名散列引用的地方消除歧义,但很少需要这样做.我猜测代码中包含的内容是出于一种错位的愿望,即要明确并与可能含糊不清的地方保持一致.