有没有办法同时拥有同一个 Perl 库的两个版本?

Is there a way to have two versions of a same Perl library in parallel?

我想迁移我的应用程序使用的 perl 库 (SOAP::Lite)。为了最终用户尽可能顺利地迁移,我希望这个库的两个版本(旧的和新的)并行工作。

目标是让最终用户在需要时自行迁移脚本(如果需要)。所以基本上,对于旧脚本,用户无需更改,新脚本将使用新版本编写。

有谁知道如何进行?

使用only

因为,正如您在评论中提到的,每个脚本都由作为调度程序请求的 Java 应用程序调用,因此您不需要两个模块 "at once"。相反,对于脚本的每个 运行,您只需要一个或另一个。这可以通过在调用旧脚本或新脚本时适当地设置环境来解决。

如果愿意,您可以使用 Perlbrew 等解决方案来管理两个或多个完全不同的 Perl 安装。如果您发现需要新旧版本之间的其他差异,这将是一个很好的方法。

但是,如果您只是想换出这个模块的版本,您需要做的就是将两者都安装在某个地方,并在调用脚本时更改模块路径。有多种方法可以做到这一点,但您可以 just use a command-line switch:

perl -Idirectory script.pl

这会将 目录 添加到 @INC,这是一组搜索模块的位置。根据需要指向旧模块或新模块(如果这样做,请确保模块的 neither 版本不在标准模块路径中,否则会出现歧义您正在使用的版本)。