@ {hash {$ key}}在Perl中意味着什么?

时间:2013-03-20 07:42:28

标签: perl hashtable

有人能告诉我@{hash{$key}}的意思吗?当我写@{hash{$key}}[$i]=$list[$i+1]时,我是否是对的?

2 个答案:

答案 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]

解除引用的->语法通常比${...}更可取,因为它更清晰,尤其是当您拥有复杂的数据结构时。