1

谁能告诉我这是什么@{hash{$key}}意思?我写的时候是否正确@{hash{$key}}[$i]=$list[$i+1]

4

2 回答 2

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];不编译,所以不,使用它是不正确的。

于 2013-03-20T07:51:38.413 回答
4

正如 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]

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

于 2013-03-20T09:11:24.373 回答