我正在尝试将HTML :: Entities模块路径添加到@INC
。我确实导出了PERL5LIB=/mypath/HTML/
,然后导出了source ~/.bashrc
。该路径反映在PERL5LIB
中,而不反映在@INC
中。我还缺少其他步骤吗?
我在CentOS6.5上使用perl 5.26.2
编辑:
我(错误地)认为我的路径未添加到@INC,因为当我运行Perl脚本时,我得到了
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
)
(添加了换行符以提高可读性)
但是它确实出现在下面
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
,但这无济于事。
答案 0 :(得分:2)
两种可能性:
<assembly>
<inline>
<fileSets>
<fileSet>
<directory>target</directory>
<outputDirectory>.</outputDirectory>
<fileMode>0644</fileMode>
<includes>
<include>${project.artifactId}-${project.version}-exec.jar</include>
</includes>
</fileSet>
</fileSets>
</inline>
</assembly>
进程的父级中设置PERL5LIB
环境变量(例如,您是从Web服务器启动的),或者perl
命令行开关已提供给-T
进程并给出了错误(因为这会导致perl
被忽略)。无论哪种情况,您都可以在源代码中使用PERL5LIB
而不是use lib
。
答案 1 :(得分:1)
use HTML::Entities
在HTML/Entities.pm
的目录中查找文件@INC
。找不到这样的路径,因为它正在寻找类似/opt/perl/lib/site_perl/5.14.2/x86_64-linux-thread-multi/HTML/HTML/Entities.pm
的路径。
将要添加到搜索路径中的目录中的HTML/
部分删除,可能会更好。
编辑:仍然存在版本不匹配的问题,但是只要模块是纯Perl且没有任何XS组件,我就不会认为,这将是一个大问题。更好地为您实际使用的perl版本提供正确的路径。这样做,您根本不必操纵搜索路径。
答案 2 :(得分:1)
这是为了总结问题并陈述似乎是最简单的解决方案。
从一线测试的输出中可以清楚地看出,要在v5.26.2下运行的程序中使用了在v5.14.2下安装的模块。即使它确实起作用,那也不是很好。
因此,在需要它的perl版本v5.26.2下安装HTML::Entities
。
这也解决了您所要解决的问题,此后您就不必为PERL5LIB
或其他任何事情而烦恼了。
此外,单行测试中的@INC
很明显未加载,就像您怀疑的那样。池上的答案use lib "...";
中给出了可能的原因以及解决方法。但是,然后您需要使用为v5.26.2安装的模块版本,并且将其与该perl一起安装后,实际上将无需指定额外的库路径。
最后,如果由于某种原因最终需要添加该路径,请按照Shawn的回答指示,离开HTML
(最后一个)目录。使用use HTML::Entities
,将搜索目录HTML
(查找Entities.pm
文件),而您只需要提供包含目录的目录即可。