后缀取消引用说((\ @a)-> @ *)v5.22

时间:2019-02-12 08:30:37

标签: 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,版本1(v5.22.1)

2 个答案:

答案 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”功能。

引用perlexperiment

  

后缀取消引用语法

     

在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

即这三个都是等效的。