You have an example of capturing the pseudo-signal __DIE__
See perldoc -f die, to see the posible exit codes (one of them is 255)
-------
oscar@toreyes-i7:~/WIP/perl/gestion_DIE$ cat prueba.pl
use diagnostics;
use strict;
sub mensaje() { print "OJO !!!! Este script se ha muerto por la ejecuc
+ión de die()\n"; }
# Instalar manejador en caso de ejecuarse un die()
$SIG{__DIE__} = \&mensaje;
my $refFake = 'pepe';
print $refFake->{'lolo'}; # Aqui se genera el error
print "Me moriré antes de mostrar esta linea\n";
oscar@toreyes-i7:~/WIP/perl/gestion_DIE$ perl prueba.pl
OJO !!!! Este script se ha muerto por la ejecución de die()
Can't use string ("pepe") as a HASH ref while "strict refs" in use at
+prueba.pl line 10.
oscar@toreyes-i7:~/WIP/perl/gestion_DIE$ echo $?
255
-------
Another example:
oscar@toreyes-i7:~/WIP/perl/gestion_DIE$ cat prueba2.pl
use diagnostics;
use strict;
use Data::Dumper;
sub mensaje() { print "OJO !!!! Este script se ha muerto por la ejecuc
+ión de die()\n"; }
sub handler { # 1st argument is signal name
# En caso de una "unhandled excepcion" como la
+generada
# por die(), @_ parece que es el mensaje de err
+or en vez
# del identificador de una señal real.
my($sig) = @_;
print "Dumper(\$sig): ", Dumper($sig);
if ($sig)
{
print "sig:", $sig, "\n";
print "Caught a SIG$sig--shutting down\n";
}
else
{
print "sig no tiene un valor de señal\n";
}
## exit(0);
}
# Instalar manejador en caso de ejecutarse un die()
# $SIG{__DIE__} = \&mensaje;
$SIG{__DIE__} = \&handler;
my $refFake = 'pepe';
print $refFake->{'lolo'}; # Aqui se genera el error
print "Me moriré antes de mostrar esta linea\n";
oscar@toreyes-i7:~/WIP/perl/gestion_DIE$ echo $?
255
------
|