如何绕过/usr/share/perl5/Carp.pm?

时间:2018-03-13 23:04:56

标签: perl

当我尝试调试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.pmCarp/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脚本),但至少它允许我现在调试它。

0 个答案:

没有答案