警告が生成された場合、どうすればPerlを死なせることができますか?
質問
使用済みパッケージによって生成される警告を含む、警告が生成されるたびに、私のスクリプト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';
語彙的にスコープされているので、助けにはなりません。 テスト:: 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}
, など。他のパッケージ(または「あなた」の別のインスタンス)がすでに実行する必要があるハンドラーを設定しているかどうかはわかりません。
他のヒント
私はあなたが探していると信じています $SIG{__WARN__}
で文書化されているように perlvar
. 。に似たもの
$SIG{__WARN__} = sub { die @_ };
あなたが望むものかもしれません。
所属していません StackOverflow