我有一个使用模块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 ::这是一个内部错误提到它无法访问后端目录(已包含在内:/)
有谁知道如何解决这样的问题?我希望我很清楚。
答案 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';