我是 perl 的新手,正在阅读用 perl 编写的代码。一行是这样写的:
$Map{$a}->{$b} = $c{$d};
我熟悉哈希的外观%samplehash
和访问方式$samplehash{a}="b"
但是上面这行实际上说明了什么是 Map 呢?
我是 perl 的新手,正在阅读用 perl 编写的代码。一行是这样写的:
$Map{$a}->{$b} = $c{$d};
我熟悉哈希的外观%samplehash
和访问方式$samplehash{a}="b"
但是上面这行实际上说明了什么是 Map 呢?
给定这些变量:
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
是一个散列,在赋值之后通过自动激活包含一个散列引用:如果内部散列引用不存在,则 Perl 通过访问散列$Map{$a}->{$b}
中的元素自动创建内部散列引用%Map
。
$Map{$a}->{$b}
相当于
${ $Map{$a} }{$b}
这就像
$hash{$b}
仅使用哈希引用$Map{$a}
而不是%hash
.
有关如何使用嵌套数据结构的一些易于记忆的规则,请参阅http://perlmonks.org/?node=References+quick+reference 。
此外,使用自动激活(默认情况下),如果$Map{$a}
以不存在或 undef 开始,它将被隐式初始化为新的哈希引用。
$Map 中键 $a 的值是关联数组的引用,该数组的键名存储在 $b 中。
%Map = ( $a => { $b => $c{$d} }, ...)