diff options
author | Jesse Luehrs <doy@tozt.net> | 2010-10-21 00:15:40 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2010-10-21 00:15:40 -0500 |
commit | 447800b5183d24c554ebb448684d3604925a1a9f (patch) | |
tree | dc8dfe563ac1bb549e35316ee15154a45b416ce5 | |
parent | f3c276587bcc908113045cda767c9d40bdf497d4 (diff) | |
download | eval-closure-447800b5183d24c554ebb448684d3604925a1a9f.tar.gz eval-closure-447800b5183d24c554ebb448684d3604925a1a9f.zip |
only pass the keys into _make_compiler
-rw-r--r-- | lib/Eval/Closure.pm | 9 |
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, '}', ); |