bump version to 2.0
[p5sagit/curry.git] / lib / curry.pm
index c98eab5..7cf281d 100644 (file)
@@ -1,8 +1,16 @@
 package curry;
 
-our $VERSION = '1.0';
+our $VERSION = '2.000000';
 $VERSION = eval $VERSION;
 
+our $curry = sub {
+  my ($invocant, $code) = splice @_, 0, 2;
+  my @args = @_;
+  sub { $invocant->$code(@args => @_) }
+};
+
+sub curry::_ { &$curry }
+
 sub AUTOLOAD {
   my $invocant = shift;
   my ($method) = our $AUTOLOAD =~ /^curry::(.+)$/;
@@ -16,12 +24,25 @@ package curry::weak;
 
 use Scalar::Util ();
 
+$curry::weak = sub {
+  my ($invocant, $code) = splice @_, 0, 2;
+  Scalar::Util::weaken($invocant) if length ref $invocant;
+  my @args = @_;
+  sub {
+    return unless defined $invocant;
+    $invocant->$code(@args => @_)
+  }
+};
+
+sub curry::_ { &$curry::weak }
+
 sub AUTOLOAD {
   my $invocant = shift;
-  Scalar::Util::weaken($invocant) if Scalar::Util::blessed($invocant);
-  my ($method) = our $AUTOLOAD =~ /^curry::(.+)$/;
+  Scalar::Util::weaken($invocant) if length ref $invocant;
+  my ($method) = our $AUTOLOAD =~ /^curry::weak::(.+)$/;
   my @args = @_;
   return sub {
+    return unless defined $invocant;
     $invocant->$method(@args => @_);
   }
 }
@@ -42,6 +63,10 @@ is equivalent to:
 
   my $code = sub { $obj->frobnicate(foo => @_) };
 
+If you have a method name (or a coderef), you can call (as of version 2):
+
+  my $code = $obj->curry::_($method => 'foo');
+
 Additionally,
 
   use curry::weak;
@@ -52,9 +77,21 @@ 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 => @_)
+    };
   };
 
+Similarly, given a method name or coderef (as of version 2):
+
+  my $code = $obj->curry::weak::_($method => 'foo');
+
+There are also C<$curry::curry> and C<$curry::weak> globals that work
+equivalently to C<curry::_> and C<curry::weak::_> respectively - you'll
+quite possibly see them in existing code because they were provided in
+pre-2.0 versions but they're unlikely to be the best option for new code.
+
 =head1 RATIONALE
 
 How many times have you written
@@ -76,7 +113,7 @@ None yet - maybe this software is perfect! (ahahahahahahahahaha)
 
 =head1 COPYRIGHT
 
-Copyright (c) 2012 the Import::Into L</AUTHOR> and L</CONTRIBUTORS>
+Copyright (c) 2012 the curry L</AUTHOR> and L</CONTRIBUTORS>
 as listed above.
 
 =head1 LICENSE