Perl - 使用带有依赖项的perl模块的lib

时间:2013-09-05 14:09:54

标签: perl ssh perl-module

我有一个使用模块Net::SSH::Any的Perl脚本。由于它不属于“默认”Perl安装,因此我必须使用use lib功能将其包含在我的脚本中。

现在,我的驱动器上有c:\lib\net\ssh\any\目录,我在脚本的开头指定了这个:use lib c:/lib;

它“有效”:它没有说该模块丢失了,但它说它无法找到auto/Net/SSH2/autosplit.ix并且最后找到no backend available at...

当我在auto目录中添加c:\lib\目录(包含正确的结构)并启动脚本时,我收到此错误:

No backend available at...

Net :: SSH ::这是一个内部错误提到它无法访问后端目录(已包含在内:/)

有谁知道如何解决这样的问题?我希望我很清楚。

2 个答案:

答案 0 :(得分:1)

您需要使用Local::Lib。 这将允许您在备用位置安装和加载一大堆库及其依赖项。我使用cpanm来管理我的模块和一个像这样的命令(我把它放在一个包装器脚本中)。

cpanm -L $cpandir $M --no-skip-installed

$cpandir是您的locallibdir,$M是您尝试安装的模块。

然后在您的代码中指定

use local::lib '~/foo'; 

但是,我建议设置一个PERL5LIB环境变量,它会将您的自定义位置追加到@INC,并且无需额外使用local :: lib行。您通常会在主目录中使用以下行编辑.bashrc.profile

export PERL5LIB=/home/myusername/mymods/

答案 1 :(得分:1)

问题是由于模块已下载并安装在32位窗口上,但我试图在perl 64位安装上运行它!所以Net :: SSH2所需的模块无法正常执行。

要恢复:

- 如何检测问题:执行此命令:(感谢Salva) " perl -Ic:\ lib -MNet :: SSH2 -e1"

- 我的脚本中的模块定义: use lib 'c:\lib';

相关问题