11

我有一个为 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. 使用/要求命令。和上面一样的问题。

我的问题:如何在脚本中指定只使用特定版本的 perl?

4

2 回答 2

9

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

perl some_script.pl

...作为“默认”(简化)perl,然后选择。应该通过执行文件本身来使用 shebang 的原始功能:

./some_script.pl

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

于 2012-07-08T23:12:25.403 回答
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;
}

这些实际上是两个不同的模块,但这是基本思想。我只是在我的脚本顶部“使用正确级别”而不是use 5.10.1;如果开发人员尝试为该产品使用错误级别的 perl,我会得到这个死。但是,它不会做任何其他use 5.10.1;可以做的事情(启用严格,启用诸如 say、switch 等功能)。

于 2012-07-08T22:21:50.533 回答