stop using Memoize, it apparently breaks under mod_perl or something
Jesse Luehrs [Sat, 16 Apr 2011 03:29:10 +0000 (22:29 -0500)]
lib/Eval/Closure.pm

index 74b64a4..a610194 100644 (file)
@@ -9,7 +9,6 @@ use Sub::Exporter -setup => {
 
 use Carp;
 use overload ();
-use Memoize;
 use Scalar::Util qw(reftype);
 use Try::Tiny;
 
@@ -193,14 +192,23 @@ sub _clean_eval_closure {
     return ($code, $e);
 }
 
-sub _make_compiler {
-    local $@;
-    local $SIG{__DIE__};
-    my $compiler = eval _make_compiler_source(@_);
-    my $e = $@;
-    return ($compiler, $e);
+{
+    my %compiler_cache;
+
+    sub _make_compiler {
+        my $source = _make_compiler_source(@_);
+
+        unless (exists $compiler_cache{$source}) {
+            local $@;
+            local $SIG{__DIE__};
+            my $compiler = eval $source;
+            my $e = $@;
+            $compiler_cache{$source} = [ $compiler, $e ];
+        }
+
+        return @{ $compiler_cache{$source} };
+    }
 }
-memoize('_make_compiler');
 
 sub _make_compiler_source {
     my ($source, @capture_keys) = @_;