当我尝试调试Perl脚本时,我收到了一个神秘的错误:
% perl -d path/to/script.pl
Loading DB routines from perl5db.pl version 1.32
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
Attempt to reload Carp/Heavy.pm aborted.
Compilation failed in require at /usr/share/perl5/Carp.pm line 33.
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.
DB<1>
我在网上遇到过类似错误的其他提及,并且在使用Centos 6安装的Carp.pm
版本中似乎存在问题。
无论如何,Carp
下安装的/usr/share/perl5
版本为1.11,而/my/local/lib/perl5
下安装的版本为1.38。
我的/usr/share/perl5
环境变量中没有PERL5LIB
,而我确实有/my/local/lib/perl5
。不过,无论我做什么,我尝试Carp
时获得的use Carp
是/usr/share/perl5
下的/my/local/lib/perl5
,而不是/my/local/lib/perl5
下的{。}}。
如何在搜索Carp.pm
和Carp/Heavy.pm
时提供% which -a perl
/usr/local/bin/perl
/usr/bin/perl
% perl -E 'say for @INC'
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
.
优先权?
编辑: Per Borodin的评论
use lib
上面的输出与我在原帖中所写的内容相矛盾;这是因为有问题的脚本是使用/my/local/lib/perl5
指定use <PACKAGE>;
的CGI脚本。它在任何其他use lib ...
语句之前执行此操作,但这似乎没有帮助。
在收集此EDIT的信息的过程中,我发现如果除了代码中的/my/local/lib/perl5
语句之外,我将PERL5LIB
放入{{1}},那么错误就会消失(我原先说过)。这并不代表脚本在生产中运行时会发生什么(作为CGI脚本),但至少它允许我现在调试它。