如何在脚本中指定仅使用特定版本的perl?

时间:2012-07-08 21:49:15

标签: perl

我有一个为5.6.1版编写的perl脚本,它依赖于Oracle包,DBI包和更多东西。一切都正确安装和工作。

最近安装了perl版本5.8.4,因为这些依赖项未正确设置,因此脚本失败。

'perl'命令指向/program/perl_v5.8.4/bin/perl - 最新版本

因此,当我必须运行我的perl脚本时,我必须在命令提示符中手动指定

 /program/perl_v5.6.1/bin/perl scriptName.pl

我尝试在脚本中添加以下行:

 /program/perl_v5.6.1/bin/perl 
 use v5.6.1;

但是,这意味着脚本必须采用Perl版本> 5.6.1

我发现了几个相关问题:

  1. 导出路径。但是,我想要所有用户的脚本而不必导出路径
  2. 指定大于的版本。但是,我只想为这个脚本使用一个特定的版本。
  3. use / require命令。与上述问题相同。
  4. 我的问题:如何在脚本中指定仅使用特定版本的perl?

2 个答案:

答案 0 :(得分:8)

问题是如果像这样调用perl脚本,则不使用shebang行(#!/some/path/to/perl)中指定的解释器:

perl some_script.pl

...然后选择'默认'(简化)perl。一个人应该使用shebang的原始力量,而不是通过执行文件本身:

./some_script.pl

当然,这意味着该文件应该是可执行的(例如,chmod a+x)。

答案 1 :(得分:4)

我的代码中有:

our $LEVEL = '5.10.1';
our $BRACKETLEVEL = sprintf "%d.%03d%03d", split/\./, $LEVEL;

if ($] != $currentperl::BRACKETLEVEL)
{
    die sprintf "Must use perl %s, this is %vd!\n", $LEVEL, $^V;
}

这些实际上是两个不同的模块,但这是基本的想法。我只是在我的脚本顶部“使用correctlevel”而不是use 5.10.1;,如果开发人员尝试对该产品使用错误的perl级别,我就会死掉。但是,它不执行use 5.10.1;将执行的任何其他操作(启用严格,启用诸如说,切换等功能)。