首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制本地安装的模块使用本地安装的依赖项

强制本地安装的模块使用本地安装的依赖项
EN

Stack Overflow用户
提问于 2013-03-22 03:15:28
回答 2查看 1.2K关注 0票数 2

我正在做一个项目,它要求所有第三方(阅读: CPAN) perl模块都安装在perforce存储库中,这样依赖它们的任何代码都可以成功运行,而不需要其他任何人手动安装它们。我使用cpanminus来安装我的CPAN模块,所以我在所需的目录中运行了cpanm -L . Moose,并且一切都安装成功了。然而,当我尝试编译我用Moose制作的模块时,我有时会得到这样的错误:

代码语言:javascript
复制
Undefined subroutine &Carp::longmess_heavy called at /usr/lib/perl5/5.8.8/Carp.pm line 235.

看起来,尽管Carp是随Moose一起安装到我的本地目录中的,但它使用的是/user/lib/perl5/5.8.8中的(过时)版本。我可以在我的机器上升级Carp,但一旦我将我的代码签入到存储库中,其他所有拥有过时的Carp的人都会遇到同样的问题。那么,如何强制驼鹿使用本地安装的Carp,而不是/usr/lib/perl5/5.8.8中的Carp呢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-23 02:54:31

我设法找到了一个解决方案。它是混乱的,但这是我加入一个已经有一个混乱的系统的项目所要付出的代价。

在包含Moose之前,我必须明确要求新的Carp:

代码语言:javascript
复制
require "[path to Carp]/Carp.pm";

这产生了很多关于重定义子例程的警告,所以我不得不(暂时)抑制它们:

代码语言:javascript
复制
my $restore_warn = $SIG{'__WARN__'};
$SIG{'__WARN__'} = sub {};
require "[path to Carp]/Carp.pm";
$SIG{'__WARN__'} = $restore_warn;
票数 0
EN

Stack Overflow用户

发布于 2013-03-22 03:20:28

你不能强迫驼鹿,你要强迫perl。您已经将模块安装在了perl不知道的位置,因此您需要将此情况告知perl

因为你想影响所有的脚本,所以你应该在你的登录脚本中放置。

代码语言:javascript
复制
export PERL5LIB=/home/.../lib

如果您只想影响这一个程序,您可以使用以下命令启动该程序:

代码语言:javascript
复制
PERL5LIB=/home/.../lib script

或者,您可以在脚本中添加以下内容:

代码语言:javascript
复制
use lib '/home/.../lib';
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15556201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档