don't try and call a method on a weakened object that already disappeared
Matt S Trout [Mon, 30 Jul 2012 12:33:06 +0000 (12:33 +0000)]
lib/curry.pm

index c98eab5..544013e 100644 (file)
@@ -22,6 +22,7 @@ sub AUTOLOAD {
   my ($method) = our $AUTOLOAD =~ /^curry::(.+)$/;
   my @args = @_;
   return sub {
+    return unless $invocant;
     $invocant->$method(@args => @_);
   }
 }
@@ -52,7 +53,10 @@ is equivalent to:
 
   my $code = do {
     Scalar::Util::weaken(my $weak_obj = $obj);
-    sub { $weak_obj->frobnicate(foo => @_) };
+    sub {
+      return unless $weak_obj; # in case it already went away
+      $weak_obj->frobnicate(foo => @_)
+    };
   };
 
 =head1 RATIONALE