在 Perl 中捕获未声明的文件句柄使用

Catching undeclared use of a filehandle in Perl

下面的Perl程序在执行过程中没有输出任何错误。有没有办法在执行尝试打印到未声明的句柄时引发异常?对于下面的情况,未声明的句柄将是 STD_ERRDOES_NOT_EXIST.

use strict;

print STD_ERR        "(UNDECLARED) DOES NOT PRINT\n";
print STDERR         "     (EXIST) DOES PRINT\n";
print DOES_NOT_EXIST "(UNDECLARED) DOES NOT PRINT\n";

虽然上面的代码为了说明问题进行了简化, 我浪费了几十分钟试图找出我的真实程序中的问题。在我的真实程序中,我意识到我拼错了要打印的句柄。我想避免这种浪费时间的情况,但是use strict;根本就没有这样做。

您可以使用 use warnings 'unopened' 警告未打开的文件句柄的使用。要使警告致命(即抛出异常),您可以使用:

use warnings FATAL => 'unopened';

另见 perldoc warnings and perldiag