Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Perl
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib/Sub
t
xt
.shipit
.travis.yml
Changes
LICENSE
MANIFEST
MANIFEST.SKIP
Makefile.PL
README

README

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.

Something went wrong with that request. Please try again.