我几乎是Perl的新手。所以只是想知道在嵌套哈希中访问值的两种方式之间的差异。
考虑以下哈希:
my %hsh = (
'fruits' => {
'red' => 'apple',
'yellow' => 'banana',
},
'veg' => {
'red' => 'capcicum',
'yellow' => 'lemon',
},
);
#way 1
print $hsh{'fruits'}{'red'};
#way 2
print $hsh{'fruits'}->{'red'};
两者都有相同的输出apple
。但这两种方式有什么区别?
答案 0 :(得分:3)
->
运算符用于取消引用散列或数组引用。在您的情况下,它不是必需的,因为Perl在处理多维数据结构时会假定取消引用。但在其他情况下,有必要:
my $ref = [ 'a','b','c' ];
print $ref[0]; #Fails
print $ref->[0]; #Succeeds
答案 1 :(得分:1)
没有区别。 Perl的理念是“实现它的方法不止一种”。
->
只是一个明确的解除引用。省略它时,Perl 通常知道你的意思。可能存在大型嵌套的情况,您希望明确地拥有它。
编辑我的帖子不清楚。在这种情况下,Perl知道你的意思,但正如@cHao指出的那样,有时它不会。
答案 2 :(得分:0)
->
是一个解除引用的运算符;它与hash refs 一起使用,而不是哈希。使用Hashrefs避免创建哈希数据的副本,这会减少CPU和内存的使用。
创建哈希:
my %hash = ('red' => 'apple');
或
my %hash = %$hashref;
访问使用:
print $hash{'red'};
创建hashref:
my $hashref = { 'red' => 'apple' };
或
my $hashref = \%hash;
访问使用:
print $hashref->{'red'};