Pregunta

Me gustaría que mi script de Perl a morir cada vez que se genera un aviso, incluyendo las advertencias que se generan por paquetes usados.

Por ejemplo, esto debe morir:

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'; no ayuda, ya que está ámbito léxico. :: NoWarnings también no hacer el trabajo, ya que no mata al guión.

¿Fue útil?

Solución

Para añadir a la respuesta de rafl: al agregar un controlador a %SIG, es (por lo general) mejor no sobrescribe cualquier manejador anterior, pero lo llaman después de realizar su código:

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

    # DO YOUR WORST...

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

(Esto también se aplica a los gestores de señales como $SIG{HUP}, $SIG{USR1}, etc. Nunca se sabe si algún otro paquete (o incluso otro ejemplo de "usted") ya configurar un controlador que aún necesita para funcionar.)

Otros consejos

Creo que estás buscando $SIG{__WARN__} como se documenta en perlvar . Algo similar a

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

podría ser lo que quiera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top