curry3pm
Create automatic curried method call closures for any class or object
Usage
use curry;my $code = $obj->curry::frobnicate('foo');
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;my $code = $obj->curry::weak::frobnicate('foo');
is equivalent to:
my $code = do {Scalar::Util::weaken(my $weak_obj = $obj);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 $curry::curry and $curry::weak globals that work equivalently to "curry::_" and "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.
Rationale
How many times have you written
sub { $obj->something($some, $args, @_) }
or worse still needed to weaken it and had to check and re-check your code to be sure you weren't closing over things the wrong way?
Right. That's why I wrote this.
Contributors
None yet - maybe this software is perfect! (ahahahahahahahahaha)
Releases
4 releases since Debian 10 (Buster); the text changed 2 times.