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

NAME

Exception::Simple - simple exception class

SYNOPSIS

    use Exception::Simple;
    use Try::Tiny; #or just use eval {}, it's all good

    ### throw ###
    try{
        Exception::Simple->throw( 'oh noes!' );
    } catch {
        warn $_; #"oh noes!" 
        warn $_->error; #"oh noes!"
    };

    my $data = { 
        'foo' => 'bar',
        'fibble' => [qw/wibble bibble/],
    };
    try{
        Exception::Simple->throw( 
            'error' => 'oh noes!',
            'data' => $data,
        );  
    } catch {
        warn $_; #"oh noes!"
        warn $_->error; #"oh noes!"

        warn $_->data->{'foo'}; #"bar"
    };
   
    ### throwc ###
    try{
        Exception::Simple->throwc( "Some::Fake::Exception::Class", 'oh noes!' );
    } catch {
        warn $_; #"oh noes!"
        warn ref( $_ ); #"Some::Fake::Exception::Class"
        warn $_->error; #"oh noes!"
    };

    my $data = { 
        'foo' => 'bar',
        'fibble' => [qw/wibble bibble/],
    };
    try{
        Exception::Simple->throwc( 
            'Some::Fake::Exception::Class',
            'error' => 'oh noes!',
            'data' => $data,
        );  
    } catch {
        warn $_; #"oh noes!"
        warn ref( $_ ); #"Some::Fake::Exception::Class"
        warn $_->error; #"oh noes!"

        warn $_->data->{'foo'}; #"bar"
    };

DESCRIPTION

pretty simple exception class. auto creates argument accessors. simple, lightweight and extensible are this modules goals.

METHODS

throw

with just one argument $@->error is set Exception::Simple->throw( 'error message' ); # $@ stringifies to $@->error

or set multiple arguments (creates accessors) Exception::Simple->throw( error => 'error message', data => 'cutom atrribute', ); # warn $@->data or something

throwc

Same as throw, except the first argument is a classname which will become the classname of the exception object.

Useful for throwing specific execptions without having to create lots of packages.

    try{
        Exception::Simple->throwc( "Some::Fake::Exception::Class", 'oh noes!' );
    } catch {
        warn ref( $_ ); #Some::Fake::Exception::Class
    };
    

WARNING: using throwc with a real classname is unsupported i.e. throwc( "Data::Dumper", "derp" ) #you just made god kill a kitten

rethrow

say you catch an error, but then you want to uncatch it

    use Try::Tiny;

    try{
        Exception:Simple->throw( 'foobar' );
    } catch {
        if ( $_ eq 'foobar' ){
        #not our error, rethrow
            $_->rethrow; 
        }
    };

error

accessor for error, if its been set

SUPPORT

Bugs should always be submitted via the CPAN bug tracker

For other issues, contact the maintainer

AUTHOR

n0body <n0body@thisaintnews.com>

CONTRIBUTORS

Stephen Thirlwall

SEE ALSO

http://thisaintnews.com, Try::Tiny

LICENSE

Copyright (C) 2012 by n0body http://thisaintnews.com/

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.