The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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