Perl切片和参考

时间:2016-02-10 03:11:51

标签: perl slice

我创建了以下切片:

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 个答案:

答案 0 :(得分:3)

两点:

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

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