| Basicos::Exceptions |
package MyExceptions;
use base qw(Exporter);
# exporta automáticamente su función catch()
use Basicos::Exceptions;
use Exception::Class (
'MyException' => {
isa => 'Basicos::Exceptions'
},
'MyException::System' => {
isa => 'MyException',
fields => [ qw(errno) ]
}
);
# Exportamos automáticamente la función catch() de Basicos::Exceptions
# hacia el programa principal
our @EXPORT = qw(catch);
package main;
MyException::System->throw('could not open password file');
eval {
_largo_y_tortuoso_proceso();
};
if (my $ex = catch($@)) {
# ha ocurrido un error
1;
}
# ningún problema
else {
1;
}
=head1 DESCRIPTION
Este módulo está diseñado para facilitar el uso de the Exception::Class manpage en una aplicación. Su tarea principal consiste en proporcionar un mensaje de error completo de lo que ha podido provocar la excepción, reuniendo cuantos datos están a su alcance.
El resultado del método throw de la sinopsis sería algo como ésto:
test.pl(3456): error fatal in package main, file test.pl,
line 3 at lun abr 3 20:40:24 CEST 2006
with uid=1000,gid=1000,euid=1000,egid=1000
could not open password file
additional info:
errno = 1 operation not allowed
Asumiendo que el nombre del archivo fuese test.pl, naturalmente.
El campo errno toma el valor automágicamente, por lo que basta con
indicar que existe en la creación de la subclase mediante
fields in the Exception::Class manpage.
my $exception = MyExceptions->new( $message );
Este método funciona de la misma forma que el original, con la salvedad de
que si aparece el campo C<errno> en la clase, se toman los valores de las
variables C<$!> y C<$^E> para rellenarlo.
En una aplicación no debería ser necesario llamarlo directamente, puesto que the Exception::Class manpage ya se encarga de ello.
$exception->full_message();
Proporciona el mensaje de error descrito en la sección anterior, dejando
para el método L<Exception::Class/as_string> la inclusión del volcado de la
pila.
package MyExceptions;
use Basicos::Exceptions qw(:all);
package main;
eval {
my_proceso();
};
if (my $ex = catch($@)) {
1;
}
Esta función global está diseñada para reducir la comprobación de la existencia de una excepción en un programa de aplicación.
Según el parámetro recibido (generalmente $EVAL_ERROR ó $@) actúa de
la siguiente forma:
Retorna lo mismo, y sirve como indicador de que la última evaluación no ha generado excepciones.
Retorna precisamente lo que ha recibido, sin más cambios ni comprobaciones.
Crea un nuevo objeto de tipo the Exception::Class::Base manpage, lo alimenta con el valor escalar y retorna su referencia.
Por razones de diseño que están fuera de nuestro control, el módulo the Exception::Class manpage debe estar presente tanto en la construcción del paquete como en su uso.
There are no known bugs in this module.
Please report problems to Víctor Moral <victor@taquiones.net>, Angel Ortega <angel@triptico.com>
Patches are welcome.
Víctor Moral <victor@taquiones.net>, Angel Ortega <angel@triptico.com>
Copyright (c) 2005 <Venexma Europa, S.L.>. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
| Basicos::Exceptions |