perl - 如果生成警告,如何让 Perl 死掉?

标签 perl warnings die

我希望我的脚本 perl 在生成警告时死掉,包括由使用的包生成的警告。

例如,这应该死:

use strict;
use warnings;
use Statistics::Descriptive;

my @data = ( 8, 9, 10, "bbb" );
my $stat = Statistics::Descriptive::Full->new();
$stat->add_data(@data);
use warnings FATAL => 'all';不会有帮助,因为它是词法范围的。 Test::NoWarnings也不会完成这项工作,因为它不会终止脚本。

最佳答案

添加到 rafl 的答案:当向 %SIG 添加处理程序时,(通常)最好不要覆盖任何以前的处理程序,而是在执行代码后调用它:

my $old_warn_handler = $SIG{__WARN__};
$SIG{__WARN__} = sub {

    # DO YOUR WORST...

    $old_warn_handler->(@_) if $old_warn_handler;
};

(这也适用于信号处理程序,如 $SIG{HUP}$SIG{USR1} 等。你
永远不知道其他一些包(甚至“你”的另一个实例)是否已经
设置一个仍需要运行的处理程序。)

关于perl - 如果生成警告,如何让 Perl 死掉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3896060/

相关文章:

php - 样式die()错误消息

perl - 如何按天拆分 Dancer 错误日志?

regex - 在 Perl 中使用 Text::CSV 解析制表符分隔的文件

c++ - 想要将结构数组从 perl 脚本传递到 cpp 文件

c++ - 我可以将特定警告视为错误吗?

perl - 如果每个人都使用的调试代码的机制覆盖它,你如何捕获一个有问题的 sig die 处理程序?

Perl:在不死的情况下捕获错误

perl - perl 中的模式匹配和正则表达式?

gcc - CMake (cotire) 预编译头文件并禁用警告

c - Eclipse 的 'Suggested parenthesis around expression' 有坚实的基础吗?