首页 文章

Perl切片和参考

提问于
浏览
0

我创建了以下切片:

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 回答

  • 3

    两点:

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

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

相关问题