2011-12-09 48 views
3

我是新来的Perl和阅读用Perl编写的代码。一条线读取这样的:这个变量在perl中的数据结构是什么?

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

我所熟悉的哈希看起来像%samplehash$samplehash{a}="b"

访问,但什么上面一行说一下什么是实际地图?

+0

什么是Map ...请参阅perldoc http://perldoc.perl.org/functions/map.html – yb007

+1

当您需要了解特定的数据结构时,转储变量会极大地提供帮助。只需'使用Data :: Dumper'并稍后'打印Dumper($ Map);'。 – musiKk

+2

@musiKk:我想你的意思是'print Dumper(\%Map);' – flesk

回答

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散列中的元素$Map{$a}->{$b}来创建。

1

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

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

5
$Map{$a}->{$b} 

相当于

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

这就好比是

$hash{$b} 

仅使用代替%hash哈希参考$Map{$a}

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

此外,如果$Map{$a}启动为不存在或undef,则它将被隐式初始化为新的散列引用。