curry(3pm)

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.

  1. 10
  2. 11
  3. 12–13

Author

mst - Matt S. Trout (cpan:MSTROUT) <[email protected]>

License

This library is free software and may be distributed under the same terms as perl itself.

From libcurry-perl 2.000001-2 in Debian 13 (Trixie). Parsed by carta from the page's man source.