我创建了以下切片:
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将前导 \
应用于哈希值的语法是什么?
1 回答
两点:
首先,散列片不生成数组,它生成切片散列元素的列表 .
其次,在列表上使用\会生成对第一个列表元素的引用列表 .