我是perl的新手并且正在阅读用perl编写的代码。一行如下:
$Map{$a}->{$b} = $c{$d};
我熟悉哈希看起来像%samplehash
并且访问为$samplehash{a}="b"
但是上面这句话实际上是什么意思呢?
答案 0 :(得分:10)
鉴于这些变量:
my $a = "apples";
my $b = "pears";
my %c = ("bananas" => 2);
my $d = "bananas";
my %Map;
作业
$Map{$a}->{$b} = $c{$d};
结果是这样的哈希:
%Map = (
"apples" => {
"pears" => 2
}
);
%Map
是一个散列,在赋值后通过autovivification包含散列引用:如果还没有,则Perl通过访问{$Map{$a}->{$b}
中的元素{}自动创建内部散列引用。 1}}哈希。
答案 1 :(得分:5)
$Map{$a}->{$b}
相当于
${ $Map{$a} }{$b}
就像
$hash{$b}
仅使用哈希引用$Map{$a}
而不是%hash
。
有关如何使用嵌套数据结构的一些易于记忆的规则,请参阅http://perlmonks.org/?node=References+quick+reference。
此外,启用自动修复(默认情况下),如果$Map{$a}
启动为不存在或未启动,则会将其隐式初始化为新的哈希引用。
答案 2 :(得分:1)
$ Map中的键$ a的值是关联数组的引用,其关键字名称存储在$ b中。
%Map = ( $a => { $b => $c{$d} }, ...)