我是Perl的新手,并试图适应Perl中的数据结构和引用。
我学到了
key %hash
返回%hash
中的键数组\{ @array }
返回对@array
所以我将两者结合起来,写了这样的内容,
use strict;
use warnings;
use Data::Dumper;
my $hash = {
key1 => 'value1',
key2 => 'value2'
};
my $keys = \{ keys %$hash }; # Supposed to be an array reference?
print Dumper $keys; # Output 1
print Dumper $keys->[0]; # Output 2
,它在Not an ARRAY reference
行产生错误Output 2
。另外,Output 1
显示的内容看起来像是哈希引用,尽管它应该是数组引用。
我的代码怎么了?
类似地,以下代码在出现相同错误时不起作用。
use strict;
use warnings;
my $array = [1, 2, 3, 4, 5];
my $first_two = \{ @{ $array }[0..1] }; # Isn't it an array ref?
my $first = $first_two->[0];
我想我对数组引用有误解。
答案 0 :(得分:6)
您遇到的问题是这是不正确的:'\{ @array } returns the reference to the @array'
。取而代之的是,\
只是添加到现有变量之前,例如:\@array
。大括号{}
用于创建匿名 hash 引用,括号[]
用于创建匿名 array 引用。
在您的示例中,您要做的是(1)将密钥存储为数组,然后使用\
获取引用:
my @keys = keys %$hash;
my $keys = \@keys;
或者(2)使用匿名数组引用:
my $keys = [ keys %$hash ];
这是一个很好的“参考”;)https://perldoc.perl.org/perlref.html#Making-References