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

ass*_*sin 5 debugging perl 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
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

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

Ste*_*ich 4

堆栈跟踪表明问题来自从调试器加载的 Term::ReadLine::Perl。因此,没有调试 -> 没有加载调试器 -> 没有加载 Term::ReadLine::Perl -> 没有错误。

通过查看 Term::ReadLine::Perl 我猜想问题出在它尝试加载 Term::ReadLine::readline 的行中,它尝试使用 STDIN、STDOUT 等执行一些操作以将其用作终端。因为这实际上意味着某些字节序列具有特殊含义(转义和控制代码,例如重置终端、切换线路模式、回显等),这可能会推断出您的 binmode STDOUT 设置。

  • 鉴于路径符号,我猜你在 Windows 上。我不认为Windows有类似tty的东西,例如访问独立于STDOUT/STDIN的终端,所以我想不可能在具有重定向STDOUT的Windows上使用readline - 因此它无法加载。 (2认同)