NAME
Exception::Delayed - Execute code and throw exceptions later
VERSION
version 0.002
SYNOPSIS
my $x = Exception::Delayed->wantscalar(sub {
...
die "meh";
...
}); # code is immediately executed
my $y = $x->result; # dies with "meh"
DESCRIPTION
This module is useful whenever an exception should be thrown at a later moment, without using Try::Tiny or similiar.
Since the context cannot be guessed, this module provides two entry-points: "wantscalar" and "wantlist".
METHODS
wantscalar
my $x = Exception::Delayed->wantscalar($coderef, @arguments)->result;
# same as:
my $x = scalar $coderef->(@arguments);
Execute code in a scalar context. If an exception is thrown, it will be catched and stored, but not thrown (yet).
wantlist
my @x = Exception::Delayed->wantscalar($coderef, @arguments)->result;
# same as:
my @x = $coderef->(@arguments);
Execute code in a list context. If an exception is thrown, it will be catched and stored, but not thrown (yet).
wantany
sub xxx {
my $x = Exception::Delayed->wantany(wantarray, $coderef, @arguments);
retrun $x->result;
}
Execute code in a list context or in a scalar context, depending on the first parameter, which should be the return value of wantarray()
.
result
Return the result of the executed code. Or dies, if there was any exception.
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/zurborg/libexception-delayed-perl/issues
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
AUTHOR
David Zurborg <zurborg@cpan.org>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2015 by David Zurborg.
This is free software, licensed under:
The ISC License