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 )