summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-10-21 00:15:40 -0500
committerJesse Luehrs <doy@tozt.net>2010-10-21 00:15:40 -0500
commit447800b5183d24c554ebb448684d3604925a1a9f (patch)
treedc8dfe563ac1bb549e35316ee15154a45b416ce5 /lib
parentf3c276587bcc908113045cda767c9d40bdf497d4 (diff)
downloadeval-closure-447800b5183d24c554ebb448684d3604925a1a9f.tar.gz
eval-closure-447800b5183d24c554ebb448684d3604925a1a9f.zip
only pass the keys into _make_compiler
Diffstat (limited to 'lib')
-rw-r--r--lib/Eval/Closure.pm9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/Eval/Closure.pm b/lib/Eval/Closure.pm
index f90a976..aa0777d 100644
--- a/lib/Eval/Closure.pm
+++ b/lib/Eval/Closure.pm
@@ -81,10 +81,11 @@ sub _clean_eval_closure {
_dump_source(_make_compiler_source(@_));
}
- my ($compiler, $e) = _make_compiler(@_);
+ my @capture_keys = keys %$captures;
+ my ($compiler, $e) = _make_compiler($source, @capture_keys);
my $code;
if (defined $compiler) {
- $code = $compiler->(map { $captures->{$_} } sort keys %$captures);
+ $code = $compiler->(@$captures{@capture_keys});
}
if (defined($code) && (!ref($code) || ref($code) ne 'CODE')) {
@@ -105,13 +106,13 @@ sub _make_compiler {
}
sub _make_compiler_source {
- my ($source, $captures) = @_;
+ my ($source, @capture_keys) = @_;
my $i = 0;
return join "\n", (
'sub {',
(map {
'my ' . $_ . ' = ' . substr($_, 0, 1) . '{$_[' . $i++ . ']};'
- } sort keys %$captures),
+ } @capture_keys),
$source,
'}',
);