NAME
Sub::Exception - Code block with exception handler.
SYNOPSIS
Usually, this module acts in use phase:
use
Redis;
# when some exception occurred in this block, exception MyException threw.
redis_cmds {
my
$redis
= Redis->new;
$redis
->multi;
...
# redis commands
$redis
->
exec
;
};
Optionally have class methods exporting code block to specified package.
use
Sub::Exception;
Sub::Exception->export(
name
=>
'redis_cmds'
,
error_handler
=>
sub
{ MyException->throw(
$_
) },
package
=>
'Target::Package'
,
);
DESCRIPTION
Sub::Exception is code block generator that have own exception handler.
IMPORT FUNCTION
This is main usage of this module. You can set multiple sub name and error handler pairs at once.
use
Sub::Exception
database_cmds
=>
sub
{
die
sprintf
'DB Error: %s'
,
$_
},
redis_cmds
=>
sub
{
die
sprintf
'Redis Error: %s'
,
$_
};
Above code is export two subs: database_cmds
and redis_cmds
into current package. And these subs has own error handlers.
database_cmd {
# some database functions
};
Exceptions in this code block is caught by its error handler:
sub
{
die
sprintf
'DB Error: %s'
,
$_
}
So all exceptions wraps 'DB Error: ' prefix string and re-throw it.
CLASS METHODS
export( name => 'Str', error_handler => 'CodeRef', package => 'Str' )
Sub::Exception->export(
name
=>
'redis_cmds'
,
error_handler
=>
sub
{ MyException->throw(
$_
) },
package
=>
'Target::Package'
,
);
Another way to export code blocks.
is equivalent to:
use
Sub::Exception;
Sub::Exception->export(
name
=>
'func'
,
error_handler
=>
sub
{ ... },
package
=> __PACKAGE__,
);
This method is a bit verbosity but it's possible to export functions to any packages.
AUTHOR
Daisuke Murase <typester@cpan.org>
COPYRIGHT AND LICENSE
Copyright (c) 2012 KAYAC Inc. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.