NAME
PException - Exception manager
SYNOPSIS
use PException;
try {
throw( AnException->new() ) if $something;
throw( AnOtherException->new( [] ) )
unless $anotherthing;
}
catch AnException( sub { } ) ,
onfly AnOtherException( sub { } ) ;
DESCRIPTION
Methods & Functions
- try
-
execute code until its end or an exception happens.
- throw
-
throw a list of exceptions.
- new
-
create a new instance of an Exception.
- catch
-
execute an subroutine if this kind of exception is thrown
- onfly
-
execute an subroutine and continue the execution of the last try if this kind of exception is thrown
- addFlyingHandler
-
add a flying exception handler. it allows to continue the try block where the exception appear.
Internal Calls
- hadWaittingExceptions
-
return true if there is waitting exceptions, false elsewhere
- newTypedCatching
-
create an object for catching methods. when a catch happens,
- checkException
-
control if there is some exceptions to catch & treat in an stack
- handleException
-
code for handling a exception. it's an empty sub actually. you overload it if you want a default handler for an exception.
- __onflyhandler
-
the handler which intercept __WARN__ or __DIE__ signal
Internal Mechanism
_XCPHDL_ Structure
local %_XCPHDL_ = (
EXCEPTIONS => [],
FLYS => [],
STACKFLY => [],
ONFLY => 0,
FRESH => 0,
CANDIE => 0
);
- EXCEPTIONS
-
@{$PException::_XCPHDL_->{EXCEPTIONS}} is the stack of thrown exceptions.
- FLYS
-
@{$PException::_XCPHDL_->{FLYS}} is the stack of fly exception handler.
- STACKFLY
-
@{$PException::_XCPHDL_->{STACKFLY}} contain a stack of the list of onfly exception. each list is linked to a nested try.
- ONFLY
-
it's a flag which determine if an handler can die when it throws.
- FRESH
-
is up only when fresh exception are thrown.
- CANDIE
-
is up when a die call must be done.
Try mechanism
a try block is a code block which is evaluated.
when you throw a new set of exception, this set is pushed in @{$PException::_XCPHDL_->{EXCEPTIONS}} , the system call die.
Onfly mechanism
then $SIG{__DIE__} check if any waitting may be catched, when it finish and there is waitting exception yet, it die, else it continues the try block ; it's the onfly exception handling.
Catch mechanism
the catching part is the same thing than upside, but you can't continue the execution of the try block.
BUGS
Don't try to change $SIG{__WARN__} and $SIG{__DIE__} inside a try block.
TO DO
- Better documentation
- Add the waitting exception capacity ( aka warning exceptions which are thrown when others exceptions are thrown )
- Overload CORE::warn & CORE::die by other function which don't interact with the engine
- Add a "transaction" try ( aka try blocks wich are executed totaly or not ) if it's possible
- Add other tests ...
COPYRIGHT, LICENCE
Copyright (c) 1998-2003 Samuel MOUNIEE
This file is part of PException.
PException is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
PException 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. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with PException; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
AUTHOR
Samuel Mouniée <mouns@mouns.net>
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 464:
Non-ASCII character seen before =encoding in 'Mouniée'. Assuming CP1252