我创建了以下切片:
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.
我希望这会产生一个对由散列片填充的数组的数组引用,相当于:
my $arrayref_containing_slice = [ @hash{qw(a b c)} ]; # [1, 2, 3]
但实际上正在做更多的事情:
my @mapped_list_of_values_to_refs = map { \$hash{$_} } qw(a b c); # (\1, \2, \3)
我在documentation中可以找到描述此行为的要点是声明:
切片访问列表,数组或散列的多个元素 同时使用下标列表。
\@hash{qw(a b c)}
实际上是一个列表切片,而不是哈希切片?我对哈希值的引用感到惊讶,而不是结果值的数组。什么是导致perl将前导\
应用于散列值的语法是什么?
答案 0 :(得分:3)
两点:
首先,哈希切片不会生成数组,它会生成切片哈希元素的列表。
其次,在列表上使用\会生成对第一个列表元素的引用列表。