如何在perl脚本中使用perl模块的某个版本(或更高版本)?

时间:2011-01-23 06:45:27

标签: perl version perl-module

我在我的Perl脚本中使用Term::ANSIColor来对终端输出进行着色,我正在使用colorstrip函数,该函数仅在Term::ANSIColor版本2.01中添加,根据变更日志。那么,如果找不到die的那个版本,有没有办法让我的脚本自动Term::ANSIcolor带有相应的错误消息?

3 个答案:

答案 0 :(得分:21)

只需:

use Term::ANSIColor 2.01;

请参阅perldoc -f use

  

使用模块版本列表

     

如果Module和LIST之间存在VERSION参数,则use将使用给定版本作为参数调用Module类中的VERSION方法。如果给定版本大于变量$ Module :: VERSION的值,则继承自UNIVERSAL类的默认VERSION方法会突然显示。

答案 1 :(得分:7)

大多数模块定义包变量$VERSION

use Term::ANSIColor;
die "Sorry, this program needs Term::ANSIColor >= v2.01!\n"
    unless $Term::ANSIColor::VERSION >= 2.01;

这也是指定模块的最大版本的好方法。

use Module::Foo;
die "You need an *older* version of Module::Foo that ",
    "still has the &barbaz method defined"
    if $Module::Foo::VERSION >= 0.47;

答案 2 :(得分:2)

只需指定您要使用的版本:

use Some::Module 2.13;

如果版本不是至少2.13,则操作将失败。

您可以尝试使用命令行中提供的版本:

perl -MSome::Module=9999 -e 'exit 0'

这通常会因错误消息中显示的错误版本号而死(除非您尝试使用的模块恰好具有5位数或更长版本号,或者除非模块类似于strict并且不喜欢通过命令行加载版本号或URI(请参阅注释以获取详细信息)。)

$ perl -MFile::Find=999 -e 'exit 0'
File::Find version 999 required--this is only version 1.07 at
/usr/perl5/5.8.4/lib/Exporter/Heavy.pm line 121.
BEGIN failed--compilation aborted.
$ perl -e 'use File::Find 999; exit 0'
File::Find version 999 required--this is only version 1.07 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
$

在我通常不使用的机器上运行,因此Perl的陈旧版本。