The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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.