3

我是 perl 的新手,正在阅读用 perl 编写的代码。一行是这样写的:

$Map{$a}->{$b} = $c{$d};

我熟悉哈希的外观%samplehash和访问方式$samplehash{a}="b"

但是上面这行实际上说明了什么是 Map 呢?

4

3 回答 3

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是一个散列,在赋值之后通过自动激活包含一个散列引用:如果内部散列引用不存在,则 Perl 通过访问散列$Map{$a}->{$b}中的元素自动创建内部散列引用%Map

于 2011-12-09T07:40:46.457 回答
5
$Map{$a}->{$b}

相当于

${ $Map{$a} }{$b}

这就像

$hash{$b}

仅使用哈希引用$Map{$a}而不是%hash.

有关如何使用嵌套数据结构的一些易于记忆的规则,请参阅http://perlmonks.org/?node=References+quick+reference 。

此外,使用自动激活(默认情况下),如果$Map{$a}以不存在或 undef 开始,它将被隐式初始化为新的哈希引用。

于 2011-12-09T10:25:51.320 回答
1

$Map 中键 $a 的值是关联数组的引用,该数组的键名存储在 $b 中。

%Map = ( $a => { $b => $c{$d} }, ...)

于 2011-12-09T07:40:25.397 回答