Params-PatternMatch

 view release on metacpan or  search on metacpan

lib/Params/PatternMatch.pm  view on Meta::CPAN

use TryCatch;

our $COMPARATOR = Data::Compare->new;

our @EXPORT_OK = qw/as case match otherwise rest then/;

our $VERSION = '0.01';

our @args;

sub as(&) { @_ }

sub case {
  my $action = pop;
  Carp::croak('Not a CodeRef.') if ref $action ne 'CODE';

  my ($i, $j) = (0, 0);
  for (; $i < @args and $j < @_; ++$i, ++$j) {
    if (is_slurp_arg($_[$j])) {
      $_[$j]->set(@args[$i .. $#args]);
      $i = $#args;

lib/Params/PatternMatch.pm  view on Meta::CPAN

  local *args = \@_;
  try {
    $patterns->();
  } catch (Params::PatternMatch::Values $retval) {
    return $retval->values;
  } catch ($error) {
    die $error;
  };
}

sub otherwise(&) {
  Carp::croak('Not a CodeRef.') if ref $_[0] ne 'CODE';
  die Params::PatternMatch::Values->new($_[0]->(@args));
}

sub rest(\@) { Params::PatternMatch::SlurpArg->new($_[0]) }

sub then(&) { @_ }

package Params::PatternMatch::SlurpArg;

sub new { bless $_[1] => $_[0] }

sub set { @{ $_[0] } = @_[1 .. $#_ ] }

package Params::PatternMatch::Values;

sub new { bless \@_ => shift }



( run in 0.226 second using v1.01-cache-2.11-cpan-49f99fa48dc )