我正在寻找一种模块(或脚本)能够加载模块的特定版本的方法(主要是查看内部模块,如果解决方案不能与CPAN模块一起使用).
我更喜欢这在很大程度上是一个包装练习(就像npm / nodejs的工作方式).我的代码定义了它想要的模块版本,然后在使用时加载正确的模块版本.
如果无法在包装层面完成,是否有一种理智的方式来处理代码?我真的不想乱丢模块(或模块的USE-er)
if($api_ver eq '1.1'){ }
elsif($ap_ver eq '2.0') { }
更一般地说,我正在尝试提出一种在模块级别跟踪版本化API的合理方法.
我只看了这个帖子How can I ‘use’ specific version of a perl CPAN module?,但单元测试报告相当糟糕,据我所知,该模块在6年内没有被触及(尽管我的名单仍然在我的名单上)
编辑:基本上我在问我的应用程序中的不同模块是否可以使用同一模块的不同版本.就像是:
Module A
load version 1.0.1 of Module Foo
Module B
load version 2.1.0 of Module Foo
模块A& B是更大的软件的一部分,Module Foo也是本地编写的(正如我所说,我不太关心CPAN版本)我希望能够对Module Foo进行API更改,而不必每次都提升使用它的模块.是的,最终模块Foo的版本1可能最终被弃用,并且代码必须在那时被提升.
最佳答案 我过去通过在所有版本中使用版本在命名空间中的副本来解决这个问题.这似乎是代码重复,但它确实只是确保您提供稳定的API而不依赖于所有加载.
API::Version1::Dependency
API::Version2::Dependency
如果我们正在谈论面向Web的API(可能是REST),那么您可以让您的API成为单独的进程,这样他们就不会遇到加载冲突的冲突,并使用http://www.example.org/api之类的东西来调用它们. / 1 / frobnicate