有人能告诉我@{hash{$key}}
的意思吗?当我写@{hash{$key}}[$i]=$list[$i+1]
时,我是否是对的?
答案 0 :(得分:7)
@{hash{$key}}
是一种奇怪的写作方式
@hash{$key}
这称为哈希切片。它允许您一次从哈希中获取多个值。例如,
say for @hash{'a', 'b'};
装置
say for $hash{a}, $hash{b};
所以使用
是相当愚蠢的@hash{$key}
而不是
$hash{$key}
@{hash{$key}}[$i]=$list[$i+1];
无法编译,所以不,使用它是不正确的。
答案 1 :(得分:3)
正如ikegami解释的那样,@{hash{$key}}
是一个哈希切片(只有一个元素)。
您可能需要这样做:@{$hash{$key}}
。如果哈希的每个元素都是数组引用,则此语法将允许您访问该数组。
例如,假设您的哈希包含数组,如下所示:
my %hash = (
foo => [1, 2, 3, 4, 5],
bar => [qw/baz sproing blargh/]
);
@{$hash{foo}}
将为(1, 2, 3, 4, 5)
如果是这种情况,那么这种语法就可以了:
${$hash{$key}}[$i]=$list[$i+1]
请注意,您只访问数组的元素,而不是整个数组。因此,您使用${$hash{$key}}
代替@{$hash{$key}}
。
另一种做同样事情的方法是:
$hash{$key}->[$i]=$list[$i+1]
解除引用的->
语法通常比${...}
更可取,因为它更清晰,尤其是当您拥有复杂的数据结构时。