如何动态更改Perl模块路径?

pyt*_*hor 9 perl module

我有两个不同版本的Perl模块.目前,关键脚本使用环境变量指定的模块版本,系统依赖于不同用户运行的不同任务.用户的环境将决定使用哪个版本的Perl模块.

现在我想将其更改为Perl脚本中指定的版本,即取决于传递的选项.不幸的是,这样的代码:

if ($new){ use lib "newdir"; }
else{ use lib "olddir"; }
use module;
Run Code Online (Sandbox Code Playgroud)

不起作用.Perl只需将newdirolddir附加到@INC然后运行脚本.

如何动态指定要使用的模块?

mob*_*mob 16

你需要使用一个BEGIN{}块,你if- else代码将在编译时运行:

BEGIN {
    if ($new) { unshift @INC, "newdir"; }
    else {      unshift @INC, "olddir"; }
}
use module;
Run Code Online (Sandbox Code Playgroud)

您还可以设置PERL5LIB环境变量,这样就不必在脚本中进行这种配置.


yst*_*sth 13

CPAN上只有一个pragma,可以轻松安装然后使用同一模块的多个版本.