我该如何使用特定版本的Perl CPAN模块?

9

我有很多Perl代码,测试和生产环境中的功能不同,我想锁定我的代码到特定版本的CPAN模块,以防未来某些更改可能会破坏我的代码。

因此,我想使用所有模块的特定版本。所谓“使用”,是指

use XML::Smart 

检查此线程是否对您有用的信息:https://dev59.com/nXVC5IYBdhLWcg3wixs0 - slayedbylucifer
你是 Jeffrey Thalhammer 的 Pinto 的典型使用案例。它可以在 CPAN 上找到:http://search.cpan.org/perldoc?Pinto - DavidO
1
具体来说,Pinto 管理您的依赖关系链,允许您将某些模块固定在特定版本,同时允许其他模块在新版本发布时进行升级。您可以回滚更改等等。它就像专门针对 Perl 模块/分发的版本控制工具。 - DavidO
Pinto并不意味着其他人会忽略它并通过其他方式进行升级。 - brian d foy
3个回答

9

要使用特定模块,请参考only

use only MyModule => 0.30;

如果你想安装的模块版本高于当前已安装的版本,可以打印错误信息。你可以这样说:
use XML::Smart v1.6.9;

或者

use XML::Smart 1.6.9;


为了向后兼容性

use XML::Smart 1.006_009;  

根据 perldoc 的参考:
  • use 模块名 版本号 列表
  • use 模块名 版本号
  • use 模块名 列表
  • use 模块名
  • use 版本号

如果在模块名和列表之间出现版本号参数,则 use 命令将使用给定版本号作为参数调用类模块 Module 的 VERSION 方法。默认情况下,这个 VERSION 方法继承自 UNIVERSAL 类。如果给定版本号大于变量 $Module::VERSION 的值,则 VERSION 方法会 croak。


1
这并不妨碍使用更新版本。 - ikegami
@ikegami - 对不起。使用only模块更新了答案。 - user966588

4
你可以采用低技术方式:
BEGIN {
    use XML::Simple;
    die "..." unless XML::Simple->VERSION eq '1.23';
    }

了解特定模块报告其版本的方式可能会令人头疼。虽然version模块被认为是用于版本匹配,但实际上由于有太多指定版本的方式,因此我认为它不够可靠。


0
如果你在项目根目录使用cpanfile来声明对CPAN模块的依赖(你应该这样做),你可以在那里锁定版本。
requires 'XML::Simple' => '== 1.23';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接