Perl 后缀解引用语句(\@a)->;@*)v5.22

Perl 后缀解引用语句(\@a)->;@*)v5.22,perl,Perl,我读过关于后缀取消引用的文章,我想尝试一下,但我无法让这个简单的例子起作用 use v5.22; my @a = ('hello', 'bye', 'see you'); say((\@a)->@*); 我应该打印阵列,但我得到的只是: 数组在hola.pl第3行中运算符期望的位置找到,在该行的末尾 (之前缺少运算符?)hola.pl第7行附近的语法错误 “->@” 我的perl版本是: 这是为x86_64-linux-gnu-thread-multi构建的perl 5,版本22,sub

我读过关于后缀取消引用的文章,我想尝试一下,但我无法让这个简单的例子起作用

use v5.22;
my @a = ('hello', 'bye', 'see you');
say((\@a)->@*);
我应该打印阵列,但我得到的只是:

数组在hola.pl第3行中运算符期望的位置找到,在该行的末尾 (之前缺少运算符?)hola.pl第7行附近的语法错误 “->@”

我的perl版本是:


这是为x86_64-linux-gnu-thread-multi构建的perl 5,版本22,subversion 1(v5.22.1)


该功能在5.22.x中是实验性的,引用:

后缀解引用不再是实验性的

使用“postderef”和“postderef_qq”功能不再发出警告。现行守则 这将禁用他们以前使用的“实验::postderef”警告类别 我们将继续努力。“postderef”功能无效;所有Perl代码都可以使用 后缀取消引用,而不管范围中有什么特性声明。5.24 功能包现在包括“postderef_qq”功能

引述:

后缀解除引用语法

在Perl 5.20.0中引入

在Perl 5.24.0中接受

这就是为5.20.0+编写代码的方式。请注意,可能无法与默认Perl软件包一起安装,即需要单独安装:

#/usr/bin/perl
使用v5.20;
严格使用;
使用警告;
使用实验qw(postderef);
我的@a=(‘你好’、‘再见’、‘再见’);
说(@a);
说({\@a});
说(\@a)->@*);
出口0;
输出(
这是Perl5,版本28,Subversion1(v5.28.1)
):

你好,再见 你好,再见 你好,再见
i、 e.这三种功能都是等效的。

该功能可按如下方式激活:

use feature qw( postderef );
no warnings qw( experimental::postderef );
这可以归结为

use experimental qw( postderef );
postderef
功能也由
use功能:5.24'激活(因此由
使用v5.24;
)激活,但这两个
使用功能:5.20'
使用功能:5.22'(因此,无论是
使用v5.20;
还是
使用v5.22;
),因为该功能在5.20和5.22中仍处于试验阶段


该功能在5.20和5.24之间没有更改,因此在5.20和5.22中使用是安全的,因此可以安全地忽略警告。

您的Perl版本是什么?运行
perl-v
查看版本。另外,
say((\a)->@*)
可能应该是
say(\@a)->@*)
?这是为x86_64-linux-gnu-thread构建的perl 5,版本22,subversion 1(v5.22.1)-multi@Corion我感到抱歉,我张贴了手工复制的代码,没有时间查看勘误表;我在
say(\@a)->@*)中遇到了同样的错误
在您的代码中,该功能在5.22.x中是实验性的。我已经更新了我的答案。解决了,谢谢,这是问题所在,我将编译一个更新的版本。更新了我的答案如何让它与Fedora上的5.20.0+@StefanBecker一起工作许多核心模块与解释器分开打包,您需要安装
perl
(这个以前的名称是
perl core
)在5.24+中,它实际上根本不需要任何特性,而是自动激活的。