summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Eval/Closure.pm24
1 files changed, 16 insertions, 8 deletions
diff --git a/lib/Eval/Closure.pm b/lib/Eval/Closure.pm
index 51a6c00..3b7c0ee 100644
--- a/lib/Eval/Closure.pm
+++ b/lib/Eval/Closure.pm
@@ -200,15 +200,23 @@ sub _clean_eval_closure {
}
my ($compiler, $e) = _make_compiler($source, $alias, @capture_keys);
- my $code;
- if (defined $compiler) {
- $code = $compiler->(@$captures{@capture_keys});
- }
+ return (undef, $e) unless defined $compiler;
+
+ my $code = $compiler->(@$captures{@capture_keys});
- if (defined($code) && (!ref($code) || ref($code) ne 'CODE')) {
- $e = "The 'source' parameter must return a subroutine reference, "
- . "not $code";
- undef $code;
+ if (!defined $code) {
+ return (
+ undef,
+ "The 'source' parameter must return a subroutine reference, "
+ . "not undef"
+ )
+ }
+ if (!ref($code) || ref($code) ne 'CODE') {
+ return (
+ undef,
+ "The 'source' parameter must return a subroutine reference, not "
+ . ref($code)
+ )
}
if ($alias) {