NAME
    Sub::Exception - Code block with exception handler.

SYNOPSIS
    Usually, this module acts in use phase:

        use Redis;
        use Sub::Exception redis_cmds => sub { MyException->throw($_) };

        # 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
        use Sub::Exception %name_handler_pairs;

    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.

        use Sub::Exception func => sub { ... };

    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.

