首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用导出PERL5LIB更新@INC

无法用导出PERL5LIB更新@INC
EN

Stack Overflow用户
提问于 2018-12-16 21:29:22
回答 3查看 1.6K关注 0票数 2

我正在尝试向@INC添加HTML::Entities模块路径。我确实导出了PERL5LIB=/mypath/HTML/,然后是source ~/.bashrc。这条路径反映在PERL5LIB中,而不是@INC中。还有什么是我错过的吗?

我在CentOS6.5 6.5上使用perl 5.26.2

编辑:

我(错误地)认为我的路径没有被添加到@INC,因为当我运行perl脚本时,我得到了

代码语言:javascript
复制
Can't locate HTML/Entities.pm in @INC (you may need to install the HTML::Entities module)
(@INC contains:
/home/hek/anaconda3/bin/aux/lib/perl5
/home/hek/anaconda3/lib/site_perl/5.26.2/x86_64-linux-thread-multi
/home/hek/anaconda3/lib/site_perl/5.26.2
/home/hek/anaconda3/lib/5.26.2/x86_64-linux-thread-multi
/home/hek/anaconda3/lib/5.26.2
)

(为可读性添加的换行符)

但它确实出现在下面

代码语言:javascript
复制
echo $PERL5LIB
/opt/rh/devtoolset-2/root//usr/lib64/perl5/vendor_perl:/opt/rh/devtoolset-2/root/usr/lib/perl5:/opt/rh/devtoolset-2/root//usr/share/perl5/vendor_perl:/opt/perl/lib/site_perl/5.14.2/x86_64-linux-thread-multi/HTML/

perl -e 'use Data::Dumper; print Dumper(\@INC), "\n"'
$VAR1 = [
          '/opt/rh/devtoolset-2/root//usr/lib64/perl5/vendor_perl',
          '/opt/rh/devtoolset-2/root/usr/lib/perl5',
          '/opt/rh/devtoolset-2/root//usr/share/perl5/vendor_perl',
          '/opt/perl/lib/site_perl/5.14.2/x86_64-linux-thread-multi/HTML/',
          '/home/hek/anaconda3/lib/site_perl/5.26.2/x86_64-linux-thread-multi',
          '/home/hek/anaconda3/lib/site_perl/5.26.2',
          '/home/hek/anaconda3/lib/5.26.2/x86_64-linux-thread-multi',
          '/home/hek/anaconda3/lib/5.26.2',
          '.'
        ];

为什么会有这种差异呢?

我确实安装了多个perl版本,但是which perl返回我需要使用的版本~/anaconda3/bin/perl

我试着将脚本中的shebang从#!/usr/bin/env perl更改为#!/~/anaconda3/bin/perl,但这并没有帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-17 20:49:05

有两种可能性:

  • 如果没有在PERL5LIB进程的父进程中设置perl env,则会产生错误(例如,您从web服务器启动它),或者
  • -T命令行开关被提供给perl进程,从而产生错误(因为这会导致PERL5LIB被忽略)。

在任何一种情况下,您都可以在源中使用use lib而不是PERL5LIB

票数 2
EN

Stack Overflow用户

发布于 2018-12-17 00:20:45

use HTML::Entities@INC目录中查找文件HTML/Entities.pm。没有找到这样的路径,因为它正在寻找像/opt/perl/lib/site_perl/5.14.2/x86_64-linux-thread-multi/HTML/HTML/Entities.pm这样的路径。

删除要添加到搜索路径的目录中的HTML/部件,您可能会有更好的运气。

编辑:仍然存在版本错配,但只要模块是纯Perl,没有任何XS组件,我认为这不会是一个大问题。更好的方法是让它适合您实际使用的perl版本。这样做,你就不应该操纵搜索路径了。

票数 1
EN

Stack Overflow用户

发布于 2018-12-17 22:18:19

这是为了总结问题,并陈述什么似乎是最简单的解决方案。

从测试一行程序的输出中可以清楚地看到,安装在v5.14.2下的模块使用的是在v5.26.2下运行的程序。这是不好的,即使它碰巧起作用。

因此,在需要它的perl构建下安装HTML::Entities,v5.26.2。

这也解决了您想要解决的问题,因为这样您就不必使用PERL5LIB或其他任何东西了。

此外,您的一行测试中的@INC显然不是在实际运行中加载的,正如您所怀疑的那样。ikegami对use lib "...";的回答以及解决方案中给出了可能的原因。但是,您需要使用为v5.26.2安装的模块版本,一旦您用那个perl安装了它,实际上就不需要指定额外的库路径了。

最后,如果您最后出于某种原因需要添加该路径,请关闭HTML (最后)目录,正如Shawn的答案所示。使用use HTML::EntitiesHTML目录将被搜索(对于Entities.pm文件),您只需要提供包含它的目录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53806641

复制
相关文章

相似问题

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