Perl切片和参考

Perl slices and references

我创建了以下切片:

1
2
3
my %hash = ( a => 1, b => 2, c => 3 );
my @backslashed_slice_result = \@hash{qw(a b c)};
#  $backslashed... <-- originally I wrote this is a scalar, see below.

我希望这会产生对哈希切片填充的数组的数组引用,相当于:

1
my $arrayref_containing_slice = [ @hash{qw(a b c)} ]; # [1, 2, 3]

但实际上是在做类似的事情:

1
my @mapped_list_of_values_to_refs = map { \$hash{$_} } qw(a b c); # (\1, \2, \3)

在描述这种行为的文档中,我可以找到的主要观点是:

A slice accesses several elements of a list, an array, or a hash
simultaneously using a list of subscripts.

那么,\@hash{qw(a b c)}实际上是一个列表切片,而不是一个散列切片吗?我对引用哈希值而不是结果值数组感到惊讶。导致Perl将前导的\应用于哈希值的语法是什么?


两点:

首先,散列切片不会生成数组,它会生成已切片散列元素的列表。

其次,在列表上使用会生成对第一个列表元素的引用列表。