2013-03-20 44 views
0

有人能告诉我@{hash{$key}}是什么意思?当我写下@{hash{$key}}[$i]=$list[$i+1]时,我是否正确?

回答

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

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] 

->语法提领往往是最好${...},因为它是清洁的,尤其是当你有一个复杂的数据结构。

相关问题