加载特定版本的 perl 模块
Loading a specific version of a perl module
我正在寻找一种方法让模块(或脚本)能够加载特定版本的模块(主要是查看内部模块,如果解决方案不适用于 CPAN 模块,那是行)。
我希望这主要是一个打包练习(就像 npm/nodejs 的工作方式)。我的代码定义了它想要的模块版本,然后在使用时加载正确的模块版本。
如果无法在打包级别完成,是否有合理的方法在代码中处理?我真的不想用
乱扔模块(或模块的 USE-er)
if($api_ver eq '1.1'){ }
elsif($ap_ver eq '2.0') { }
更一般地说,我正在尝试想出一种在模块级别跟踪版本化 APIs 的理智方法。
我按照这个 post How can I 'use' specific version of a perl CPAN module? 查看了 only
但是单元测试报告相当糟糕,而且我已经 6 年没有碰过这个模块了告诉(虽然仍在我的名单上玩)
编辑:本质上我是在询问我的应用程序中的不同模块是否可以使用同一模块的不同版本。类似于:
Module A
load version 1.0.1 of Module Foo
Module B
load version 2.1.0 of Module Foo
模块 A 和 B 是一个更大的软件的一部分,模块 Foo 也是本地编写的(正如我所说,我不太关心 CPAN 版本)我希望能够 API 打破对 Module Foo 的更改,而不必提升使用它的每个模块。是的,Foo 模块的第 1 版最终可能会被弃用,届时必须提升代码。
我过去已经解决了这个问题,方法是在所有版本中都有一个依赖项的副本,该版本在命名空间中。这看起来像是代码重复,但它实际上只是确保您提供稳定的 API 而不依赖于所有加载。
API::Version1::Dependency
API::Version2::Dependency
如果我们谈论的是面向网络的 API(也许是 REST),您可以让您的 API 成为单独的进程,这样它们就不会在加载内容时发生冲突,并调用它们像 http://www.example.org/api/1/frobnicate
我正在寻找一种方法让模块(或脚本)能够加载特定版本的模块(主要是查看内部模块,如果解决方案不适用于 CPAN 模块,那是行)。
我希望这主要是一个打包练习(就像 npm/nodejs 的工作方式)。我的代码定义了它想要的模块版本,然后在使用时加载正确的模块版本。
如果无法在打包级别完成,是否有合理的方法在代码中处理?我真的不想用
乱扔模块(或模块的 USE-er)if($api_ver eq '1.1'){ }
elsif($ap_ver eq '2.0') { }
更一般地说,我正在尝试想出一种在模块级别跟踪版本化 APIs 的理智方法。
我按照这个 post How can I 'use' specific version of a perl CPAN module? 查看了 only
但是单元测试报告相当糟糕,而且我已经 6 年没有碰过这个模块了告诉(虽然仍在我的名单上玩)
编辑:本质上我是在询问我的应用程序中的不同模块是否可以使用同一模块的不同版本。类似于:
Module A
load version 1.0.1 of Module Foo
Module B
load version 2.1.0 of Module Foo
模块 A 和 B 是一个更大的软件的一部分,模块 Foo 也是本地编写的(正如我所说,我不太关心 CPAN 版本)我希望能够 API 打破对 Module Foo 的更改,而不必提升使用它的每个模块。是的,Foo 模块的第 1 版最终可能会被弃用,届时必须提升代码。
我过去已经解决了这个问题,方法是在所有版本中都有一个依赖项的副本,该版本在命名空间中。这看起来像是代码重复,但它实际上只是确保您提供稳定的 API 而不依赖于所有加载。
API::Version1::Dependency
API::Version2::Dependency
如果我们谈论的是面向网络的 API(也许是 REST),您可以让您的 API 成为单独的进程,这样它们就不会在加载内容时发生冲突,并调用它们像 http://www.example.org/api/1/frobnicate