我希望我的脚本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也没有完成工作,因为它不会杀死脚本。
答案 0 :(得分:17)
答案 1 :(得分:9)
添加到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}
等信号处理程序
永远不知道是否有其他包(或者甚至是“你”的另一个实例)
设置一个仍然需要运行的处理程序。)