使用指定版本的perl

时间:2017-09-15 08:37:27

标签: perl

我正在使用遍历HoH的脚本:

for my $bp (sort { $a <=> $b } keys $vars{$chr1}){
  for my $chr2 (sort keys $vars{$chr1}{$bp}){
    [...]
  }
}

在我的本地计算机上(运行perl v5.18.2),这是公认的语法。但是,我担心这一部分的可移植性,因为当我在我的集​​群上运行它时(运行perl v5.24.0),脚本会死掉:

  

现在禁止在script / mergesvs.pl上使用标量上的实验键   第66行。

据我了解,我可以通过将上述内容更改为:

来解决此问题
for my $bp (sort { $a <=> $b } keys %{ $vars{$chr1} }){
  for my $chr2 (sort keys %{ $vars{$chr1}{$bp} }){
    [...]
  }
}

但是由于我更频繁地使用以前的语法,我更倾向于在此脚本中使用与此兼容的perl版本(例如v5.18.2)。

我尝试在脚本顶部添加use 5.18.2,但没有任何区别。我应该在哪里指定要使用的perl版本?

或者我应该在所有代码中采用更新的样式?

2 个答案:

答案 0 :(得分:7)

您可以使用$]测试perl的版本,并执行以下操作:

use v5.18.2;

if ($] >= 5.024) {
    die("You are using a version of Perl too new for this program");
}

... 但这是可怕的想法。你应该为将来的代码进行校对,而不是将它设计为爆炸,如果Perl太新了。

正如错误消息所说,这是一个实验性功能。结果是lots of different problems

您应该停止使用它并返回使用显式解除引用(这不是新语法,它是新语法结果不好的原始语法)。

答案 1 :(得分:2)

您可以使用use指定最低版本,使用no指定最高版本。

use v5.14.0;   # die if $] < 5.014    # When C<< keys EXPR >> was introduced
no v5.24.0;    # die if $] >= 5.024   # When C<< keys EXPR >> was removed

no if $] >= 5.020, warnings => qw( experimental::autoderef );

但这是一个可怕的想法......昆汀说的......