3

Im almost newbie in Perl. So just wondering about the differences between two ways of accessing a value in nested hash.

Consider the following hash:

my %hsh = ( 
    'fruits' => { 
        'red'    => 'apple', 
        'yellow' => 'banana', 
    },
    'veg' => {
        'red'    => 'capcicum',
        'yellow' => 'lemon',
    },
);

#way 1
print $hsh{'fruits'}{'red'}; 

#way 2
print $hsh{'fruits'}->{'red'};

Both has same output apple. But what is the difference between these two ways?

4

3 回答 3

3

->运算符用于取消引用哈希或数组引用。在您的情况下,不需要,因为 Perl 在处理多维数据结构时假定取消引用。但是在其他情况下,有必要:

my $ref = [ 'a','b','c' ];

print $ref[0];    #Fails
print $ref->[0];  #Succeeds
于 2012-09-21T15:02:39.560 回答
1

没有区别。Perl 的哲学是“有不止一种方法可以做到这一点”。

->只是一个明确的取消引用。当你省略它时,Perl通常知道你的意思。在某些情况下,您可能希望明确拥有它。

编辑我的帖子不清楚。在这种情况下,Perl 知道您的意思,但正如@cHao 指出的那样,有时它不知道。

于 2012-09-21T15:01:02.227 回答
0

->是解引用运算符;它与 hash refs一起使用,而不是 hashes。Hashrefs 用于避免创建哈希数据的副本,从而减少 CPU 和内存使用。

哈希

创建哈希:

my %hash = ('red' => 'apple');

或者

my %hash = %$hashref;

访问使用:

print $hash{'red'};

哈希引用

创建哈希引用:

my $hashref = { 'red' => 'apple' };

或者

my $hashref = \%hash;

访问使用:

print $hashref->{'red'};
于 2012-09-21T15:01:59.903 回答