只有在使用-d开关运行时,perl脚本才会抛出编译错误

时间:2014-03-17 20:25:14

标签: perl debugging compiler-errors

我有一个perl脚本,当我尝试使用-d开关在调试模式下运行时,运行正常。 当我使用-d开关时,我得到一个编译错误,如:

Loading DB routines from perl5db.pl version 1.33
Editor support available.

Enter h or `h h' for help, or `perldoc perldebug' for more help.

main::(..\..\bin\testnbestrover1.pl:23):
23:     binmode STDOUT, ":utf8";
Access is denied.
Unknown error
Compilation failed in require at //fbl/NAS/PUB/RapTools/Perl64/lib/Term/ReadLine
/Perl.pm line 65.
 at //fbl/NAS/PUB/RapTools/Perl64/lib/Term/ReadLine/Perl.pm line 65
        Term::ReadLine::Perl::new('Term::ReadLine', 'perldb', 'GLOB(0x382418)',
'GLOB(0x322c30)') called at //fbl/NAS/PUB/RapTools/Perl64/lib/perl5db.pl line 60
68
        DB::setterm called at //fbl/NAS/PUB/RapTools/Perl64/lib/perl5db.pl line
2241
        DB::DB called at ..\..\bin\testnbestrover1.pl line 23
Attempt to reload Term/ReadLine/readline.pm aborted.
Compilation failed in require at //fbl/NAS/PUB/RapTools/Perl64/lib/Term/ReadLine
/Perl.pm line 65.
END failed--call queue aborted at ..\..\bin\testnbestrover1.pl line 65.
 at ..\..\bin\testnbestrover1.pl line 65

当我在没有-d开关的情况下运行脚本时,不会发生这种情况。关于这里可能出现什么问题的任何想法?

谢谢!

编辑: 如果我注释掉binmode STDOUT,“:utf8”,则会发生Term / ReadLine / Perl.pm第65行中的相同错误。声明。 在网上搜索此特定错误后,我发现其他人在使用“>”将其STDOUT重定向到文件时遇到了同样的错误运营商。事实证明,我的perl命令做了同样的事情,当我删除它时,调试器工作正常。 似乎是特定perl调试器的问题(即per5db.pl版本1.33)?

1 个答案:

答案 0 :(得分:4)

stacktrace表明问题来自从调试器加载的Term :: ReadLine :: Perl。所以没有调试 - >没有加载调试器 - >没有加载Term :: ReadLine :: Perl - >没错。

从查看Term :: ReadLine :: Perl我想问题是在它试图加载Term :: ReadLine :: readline的行中,它尝试用STDIN,STDOUT等做一些事情来将它用作终奌站。因为这实际上意味着某些字节序列具有特殊含义(转义和控制代码,如重置终端,开关线模式,回声等),这可能会与您的binmode STDOUT设置有关。