diff options
author | Jesse Luehrs <doy@tozt.net> | 2011-08-02 01:10:22 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2011-08-02 01:44:09 -0500 |
commit | 794dc9df98d2aaf2f143f32ac7dfa42fa46ce07e (patch) | |
tree | b69e18746bb51909368fa7679de263031c3e18d7 /lib | |
parent | 0fb2ea464c6eb6c52831d44ef541a0d4d5c95a92 (diff) | |
download | eval-closure-794dc9df98d2aaf2f143f32ac7dfa42fa46ce07e.tar.gz eval-closure-794dc9df98d2aaf2f143f32ac7dfa42fa46ce07e.zip |
compile each thing in a separate package, to avoid leakage
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Eval/Closure.pm | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/Eval/Closure.pm b/lib/Eval/Closure.pm index 23cf250..42c20da 100644 --- a/lib/Eval/Closure.pm +++ b/lib/Eval/Closure.pm @@ -207,14 +207,18 @@ sub _clean_eval_closure { } } +$Eval::Closure::SANDBOX_ID = 0; + sub _clean_eval { - package # hide from PAUSE - Eval::Closure::Sandbox; - local $@; - local $SIG{__DIE__}; - my $compiler = eval $_[0]; - my $e = $@; - return [ $compiler, $e ]; + $Eval::Closure::SANDBOX_ID++; + return eval <<EVAL; +package Eval::Closure::Sandbox_$Eval::Closure::SANDBOX_ID; +local \$@; +local \$SIG{__DIE__}; +my \$compiler = eval \$_[0]; +my \$e = \$@; +[ \$compiler, \$e ]; +EVAL } sub _make_compiler_source { |