Controlando warnings en tiempo de ejecución

Para controlar los mensajes de warning basta con instalar un manejador de warnings en $SIG{__WARN__}. Todos los mensajes serán redirigidos al manejador y es responsabilidad de este mostrarlos. Así pues, el uso de un manejador $SIG{__WARN__} nos permite silenciar selectivamente warnings. En el siguiente ejemplo el manejador concatena los warnings en una variable siempre que un cierto flag este activo. La cadena puede ser mostrada posteriormente:

$ cat -n warnings.pl
 1  #!/usr/bin/perl -w
 2  use strict;
 3
 4  my $ErrStr = "";
 5  my $warnflag = 1;
 6
 7  sub warnhandler {
 8    $ErrStr .= $_[0] if $warnflag
 9  }
10
11  local $SIG{'__WARN__'} = \&warnhandler;
12
13  warn "Cuidado: Mira detrás de ti!\n";
14  $warnflag = 0;
15  warn "Alguien está vigilando!\n";
16
17  print "La cadena ErrStr contiene:\n$ErrStr\n";

Al ejecutarlo se obtiene la siguiente salida:

$ ./warnings.pl
La cadena ErrStr contiene:
Cuidado: Mira detrás de ti!

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19