使用 utf8 时不输出 Perl 警告、严格和诊断错误

Posted

技术标签:

【中文标题】使用 utf8 时不输出 Perl 警告、严格和诊断错误【英文标题】:Perl warnings, strict & diagnostic errors are not output when using utf8 【发布时间】:2016-09-16 07:02:16 【问题描述】:

我已经在 Windows 7 上安装了 Strawberry Perl 5.22,然后是 Padre/Dwimperl(包括 Strawberry 5.14)。然后我卸载了 5.22。然后我使用“D:\Dwimperl\perl\bin”中的“cpan SDL”安装了 SDL。它似乎安装正确。

使用 Padre(和/或命令行)我可以运行 Perl 脚本。但是,如果我引入错误(“$r=0;”),那么除非我注释掉“use utf8;”,否则我将看不到警告/严格/诊断的正常输出

使用“使用 utf8;”我收到这个无用的错误:

BEGIN not safe after errors--compilation aborted at D:/Dwimperl/perl/lib/diagnos
tics.pm line 599.

没有它我会得到这个更有用的错误:

Global symbol "$r" requires explicit package name at sdl2.pl line 12.
Execution of sdl2.pl aborted due to compilation errors (#1)
    (F) You've said "use strict" or "use strict vars", which indicates
    that all variables must either be lexically scoped (using "my" or "state"),

    declared beforehand using "our", or explicitly qualified to say
    which package the global variable is in (using "::").

Uncaught exception from user code:
        Global symbol "$r" requires explicit package name at sdl2.pl line 12.
Execution of sdl2.pl aborted due to compilation errors.
 at sdl2.pl line 15

这是我正在使用的脚本:

#! D:\Dwimperl\perl\bin\perl.exe
use warnings;
use strict;
use diagnostics;
use utf8;
binmode STDOUT, ':utf8';
$r = 0;
print "Hello World!\n";
exit 0;

谁能告诉我如何保留有用的错误并使用utf8?

【问题讨论】:

不,@Raju!他故意省略它以产生错误。 OP的问题是他使用utf8时没有正确报告错误。 我倾向于避免使用use diagnostics。它真正所做的只是获取use warnings 的输出并在perldiag 中查找以打印出来,如果大多数编辑器和IDE 实际上没有寻找 warnings 模块的输出以突出显示您的问题。 @BlueGF,如果您发现此处提供的答案有帮助,请点赞和/或标记为已接受,以便其他有类似问题的用户受益。 感谢@tjd 的建议,我现在注释掉“使用诊断”。如果我有一个我无法弄清楚的问题,那么我无论如何都会去搜索互联网以获取更多信息。另一种方法是升级到更新版本的 Perl。 【参考方案1】:

这是一个已知问题,发生在 Strawberry Perl 之外。看看这篇文章: http://www.perlmonks.org/?node_id=884018

【讨论】:

在 5.16 中修复

以上是关于使用 utf8 时不输出 Perl 警告、严格和诊断错误的主要内容,如果未能解决你的问题,请参考以下文章

perl输出中文有乱码

详细解读一个perl脚本

如何从 Perl 输出 UTF-8?

perl:多线程写入和尾文件

perl 中的可否定选项

从另一个 Perl 脚本内部调用 Perl 搜索和替换命令时不起作用