summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Mengué <dolmen@cpan.org>2016-03-31 22:53:06 +0200
committerOlivier Mengué <dolmen@cpan.org>2016-04-01 00:04:40 +0200
commite4485b5c3bd9de9ad7d5caacbc36164479696def (patch)
tree5a120936e2b4c2c83bb46390879b08c303c3c624
parent6f1ed77258bb2e868db9f4bc877f120ea8d814f6 (diff)
downloadeval-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.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) {