我正在寻找一种方法让模块(或脚本)能够加载特定版本的模块(主要是查看内部模块,如果解决方案不能与CPAN一起使用)模块没问题。
我更喜欢这个主要是包装练习(就像npm / nodejs的工作方式)。我的代码定义了它想要的模块版本,然后在使用时加载了正确的模块版本。
如果无法在包装层面完成,是否有一种理智的方法来处理代码?我真的不想乱丢模块(或模块的使用者)
if($api_ver eq '1.1'){ }
elsif($ap_ver eq '2.0') { }
更一般地说,我试图想出一种在模块级别跟踪版本化API的理智方式。
我看了only
这篇文章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版本)我希望能够在没有模块Foo的情况下对API进行API更改必须提升使用它的每个模块。是的,最终模块Foo的第1版可能最终被弃用,并且当时代码必须被提升。
答案 0 :(得分:2)
我过去通过在所有版本中使用版本在命名空间中的副本来解决这个问题。这似乎是代码重复,但它确实只是确保您提供稳定的API而不依赖于所有加载。
API::Version1::Dependency
API::Version2::Dependency
如果我们正在讨论面向Web的API(可能是REST),那么您可以让您的API成为单独的进程,这样他们就不会遇到加载内容的冲突,并使用类似http://www.example.org/api/1/frobnicate