警告が生成された場合、どうすればPerlを死なせることができますか?

StackOverflow https://stackoverflow.com/questions/3896060

  •  29-09-2019
  •  | 
  •  

質問

使用済みパッケージによって生成される警告を含む、警告が生成されるたびに、私のスクリプト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 @_ };

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top