加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

我可以确保在5.10上编写的Perl代码将在5.8上运行吗?

发布时间:2020-12-15 21:57:55 所属栏目:大数据 来源:网络整理
导读:Perl 5.10和5.12的一些新功能(例如“say”)被定义为功能,您可以启用或禁止显式使用“功能”编译指示.但其他补充,如正则表达式的命名捕获组,是隐含的. 当我使用5.10解释器编写Perl但希望它也在5.8上运行时,我可以让Perl抱怨使用5.8中没有的东西吗?显然,最好
Perl 5.10和5.12的一些新功能(例如“say”)被定义为功能,您可以启用或禁止显式使用“功能”编译指示.但其他补充,如正则表达式的命名捕获组,是隐含的.

当我使用5.10解释器编写Perl但希望它也在5.8上运行时,我可以让Perl抱怨使用5.8中没有的东西吗?显然,最好在你打算运行的所有主要版本上测试你的代码,但让Perl自动警告我仍然很好.

解决方法

当我想确保程序在特定版本的perl下运行时,我会在该版本的perl下测试它.我的 release应用程序的一个功能是在实际上传之前在多个perls下进行测试.

这要求您拥有适当的测试套件并编写足够的测试.正如我在Effective Perl Programming中所展示的那样,同时维护几个单独的perl安装也很容易.

Test::MinimumVersion几乎听起来可能有用,但它有一些局限性.它只查看你给它的文件(所以它不会检查你加载的任何东西),我不认为它实际上看起来在正则表达式模式.其中每个都报告最低版本是5.004,其中任何一个都不是这样:

#!perl

use Perl::MinimumVersion;

my $p_flag = <<'SOURCE';
'123' =~ m/[123]/p; # 5.10 feature
SOURCE

my $named_capture = <<'SOURCE';
'123' =~ m/(?<num>[123])/; # 5.10 feature
SOURCE

my $r_line_ending = <<'SOURCE';
'123' =~ m/[123]R/p; # 5.12 feature
SOURCE

my $say = <<'SOURCE';
say 'Hello';
SOURCE

my $smart_match = <<'SOURCE';
$boolean = '123' ~~ @array;
SOURCE

my $given = <<'SOURCE';
given( $foo ) {
    when( /123/ ) { say 'Hello' }
    };

SOURCE

foreach my $source ( $p_flag,$named_capture,$r_line_ending,$say,$smart_match,$given ) {
    print "----Source---n$sourcen-----";
    my $version = Perl::MinimumVersion->new( $source  )->minimum_version;
    print "Min version is $versionn";
    }

Perl::MinimumVersion工作的部分原因是因为它查找源已经提供的提示,例如使用5.010,并使用功能等.但是,这不是启用功能的唯一方法.并且,正如您将注意到的,它错过了/ p标志之类的东西,至少在有人为此添加检查之前.但是,你总是会用PPI解决方案追逐类似的东西.

只需编译它,运行测试并找出答案就更容易了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读