【问题标题】:"Not an ARRAY reference" in PerlPerl 中的“不是数组引用”
【发布时间】:2019-08-28 08:05:36
【问题描述】:

我是 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

Output 2 的行产生错误Not an ARRAY reference。此外,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];

我想我对数组引用有误解。

【问题讨论】:

    标签: perl


    【解决方案1】:

    您遇到的问题是这不正确:'\{ @array } returns the reference to the @array'。相反,\ 只是简单地添加到现有变量之前,例如:\@array。大括号{} 用于创建匿名hash 引用,括号[] 用于创建匿名数组 引用。

    在您的示例中,您想要做的是 (1) 将键存储为数组,然后使用 \ 获取参考:

    my @keys = keys %$hash;
    my $keys = \@keys;
    

    或者(2)使用匿名数组引用:

    my $keys = [ keys %$hash ];
    

    这是一个很好的“参考”;)https://perldoc.perl.org/perlref.html#Making-References

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 2019-04-19
      • 2021-09-08
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      相关资源
      最近更新 更多