Marcel Grünauer > Error-Return > Error::Return

Download:
Error-Return-1.110510.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

New  1
Open  0
View/Report Bugs
Module Version: 1.110510   Source  

NAME ^

Error::Return - Really return() from a try/catch-block

VERSION ^

version 1.110510

SYNOPSIS ^

    use Try::Tiny;
    use Error::Return;

    sub foo {
        # ...
        try {
            # ...
            # return() here doesn't do what you might think it does
            RETURN 'bar';  # this actually returns from foo()
            # ...
        } catch {
            warn "caught error [$_]\n";
        };
        # ...
    }

DESCRIPTION ^

This module provides a way to return from within try/catch blocks with the expected semantics.

FUNCTIONS ^

RETURN

A try/catch-block as provided by Try::Tiny looks like the kind of block you might use in a for-loop or an if/then/else statement. However, it is really an anonymous subroutine, so if you return() from a try-block or a catch-block, you don't really return from the parent subroutine.

Like return except that it doesn't just return to its upper scope but smashes right through it to the next-higher scope. Actually, it skips two scopes, because it has to return from the try() subroutine as well.

RETURN is automatically exported.

ALTERNATIVES ^

Without this module, if you really wanted to return from a try/catch-block's parent subroutine, you would have to resort to something like this:

    use Try::Tiny;

    sub foo {
        ...
        my $should_return;
        try {
            ...
            $should_return = 1;
            ...
        } catch {
            ...
            # if we caught an exception, we should probably set
            # $should_return as well...
            ...
        };
        return if $should_return;
        ...
    }

PERFORMANCE ^

This module uses Scope::Upper, so there is a performance impact. However, a benchmark has shown that if used with Try::Tiny, it only takes about 5% more time than using the unsightly code given in the "ALTERNATIVES" section above. That is because try/catch does quite a bit of work itself, so the additional performance impact by munging scopes is not overly severe.

INSTALLATION ^

See perlmodinstall for information and options on installing Perl modules.

BUGS AND LIMITATIONS ^

No bugs have been reported.

Please report any bugs or feature requests through the web interface at http://rt.cpan.org/Public/Dist/Display.html?Name=Error-Return.

AVAILABILITY ^

The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit http://www.perl.com/CPAN/ to find a CPAN site near you, or see http://search.cpan.org/dist/Error-Return/.

The development version lives at http://github.com/hanekomu/Error-Return and may be cloned from git://github.com/hanekomu/Error-Return.git. Instead of sending patches, please fork this project using the standard git and github infrastructure.

AUTHOR ^

Marcel Gruenauer <marcel@cpan.org>

COPYRIGHT AND LICENSE ^

This software is copyright (c) 2009 by Marcel Gruenauer.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

syntax highlighting: