我已经阅读了有关后缀解除引用的内容,并且想尝试一下,但是我无法使这个简单的示例生效。
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,版本1(v5.22.1)
答案 0 :(得分:4)
可以按以下方式激活该功能:
use feature qw( postderef );
no warnings qw( experimental::postderef );
可以减少为
use experimental qw( postderef );
postderef
功能也由use feature ':5.24';
(因此由use v5.24;
)激活,但是它既没有被use feature ':5.20';
也没有被use feature ':5.22';
(因此被激活)激活。 use v5.20;
和use v5.22;
),因为该功能在5.20和5.22中仍处于试验阶段。
该功能在5.20和5.24之间没有变化,因此在5.20和5.22中可以安全使用,因此可以忽略警告。
答案 1 :(得分:3)
此功能在5.22.x中处于实验性状态,引用perl5240delta:
后缀取消引用不再是实验性的
使用“ postderef”和“ postderef_qq”功能不再发出警告。现有代码 禁用他们先前使用的“ experimental :: postderef”警告类别 将继续工作。 “ postderef”功能无效。所有Perl代码都可以使用 后缀取消引用,无论范围中包含哪些功能声明。 5.24 功能包现在包含“ postderef_qq”功能。
后缀取消引用语法
在Perl 5.20.0中引入
在Perl 5.24.0中接受
这是您编写5.20.0+代码的方式。请注意,experimental可能不与默认的Perl软件包一起安装,即您需要单独安装:
#!/usr/bin/perl
use v5.20;
use strict;
use warnings;
use experimental qw(postderef);
my @a = ('hello', 'bye', 'see you');
say(@a);
say(@{ \@a });
say((\@a)->@*);
exit 0;
输出(This is perl 5, version 28, subversion 1 (v5.28.1)
):
hellobyesee you
hellobyesee you
hellobyesee you
即这三个都是等效的。