12

使用済みパッケージによって生成される警告を含め、警告が生成されるたびにスクリプト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も、スクリプトを強制終了しないため、作業を行いません。

4

2 に答える 2

17

$SIG{__WARN__}に記載されている を探していると思いますperlvar。に似たもの

$SIG{__WARN__} = sub { die @_ };

あなたが望むものかもしれません。

于 2010-10-09T15:09:53.970 に答える
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}。他のパッケージ (または "あなた" の別のインスタンス) が、まだ実行する必要があるハンドラーを既にセットアップしているかどうかはわかりません。)

于 2010-10-09T18:44:41.113 に答える