diff options
author | Olivier Mengué <dolmen@cpan.org> | 2016-03-31 22:53:06 +0200 |
---|---|---|
committer | Olivier Mengué <dolmen@cpan.org> | 2016-04-01 00:04:40 +0200 |
commit | e4485b5c3bd9de9ad7d5caacbc36164479696def (patch) | |
tree | 5a120936e2b4c2c83bb46390879b08c303c3c624 | |
parent | 6f1ed77258bb2e868db9f4bc877f120ea8d814f6 (diff) | |
download | eval-closure-e4485b5c3bd9de9ad7d5caacbc36164479696def.tar.gz eval-closure-e4485b5c3bd9de9ad7d5caacbc36164479696def.zip |
Return early in case of invalid $source
... to avoid calling lexalias with undef instead of a coderef.
-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) { |