2011-01-23 53 views

回答

21

刚:

use Term::ANSIColor 2.01; 

perldoc -f use

使用模块版本列表

如果版本的说法是模块和列表之间存在,则使用将调用将Module中的VERSION方法与给定版本作为参数一起使用。如果给定的版本比变量$模块:: VERSION的值大的默认版本的方法,从通用类继承,嘎嘎叫着。

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; 
+0

这是一个好办法做到这一点。当您在导入列表中提供版本时,您将依赖实际处理此操作的导入方法。不仅如此,导入技术只需要该版本或更高版本。如果你想要一个特定的版本或版本的范围,你会得到这种更通用的技术。 – 2011-01-23 07:33:30

+1

实际上,`import`方法不需要任何帮助 - 当你使用`use`或`require`和一个版本号时,就会产生一个调用'VERSION`方法。但是每个没有特别覆盖它的包都会从`UNIVERSAL`中获得一个合适的`VERSION`方法。 – hobbs 2011-01-23 10:22:36

2

只需指定要使用的版本:如果版本不是至少2.13

use Some::Module 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版本。

相关问题