diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Eval/Closure.pm | 24 |
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) { |