perl中这个变量的数据结构是什么?

xyz*_*xyz 3 perl perl-data-structures

我是perl的新手并且阅读用perl编写的代码.一行如下:

$Map{$a}->{$b} = $c{$d};
Run Code Online (Sandbox Code Playgroud)

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

但是上面这句话实际上是什么说Map?

fle*_*esk 10

鉴于以下变量:

my $a = "apples";
my $b = "pears";
my %c = ("bananas" => 2);
my $d = "bananas";
my %Map;
Run Code Online (Sandbox Code Playgroud)

分配

$Map{$a}->{$b} = $c{$d};
Run Code Online (Sandbox Code Playgroud)

散列结果如下所示:

%Map = (
    "apples" => {
        "pears" => 2
    }
);
Run Code Online (Sandbox Code Playgroud)

%Map是哈希,其分配之后通过包含自动激活散列REF:如果尚不存在,内散列裁判自动被Perl通过访问元素创建$Map{$a}->{$b}%Map哈希值.


yst*_*sth 5

$Map{$a}->{$b}
Run Code Online (Sandbox Code Playgroud)

相当于

${ $Map{$a} }{$b}
Run Code Online (Sandbox Code Playgroud)

这就像

$hash{$b}
Run Code Online (Sandbox Code Playgroud)

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

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

此外,启用自动启动(默认情况下),如果$Map{$a}启动为不存在或未启动,它将被隐式初始化为新的哈希引用.