Algorithm-Loops
view release on metacpan or search on metacpan
lib/Algorithm/Loops.pm view on Meta::CPAN
} while( $sub =~ /^_/ );
if( eval { require Carp; 1; }
&& defined &Carp::croak ) {
unshift @_, "$sub: ";
goto &Carp::croak;
}
die "$sub: ", @_, ".\n";
}
sub Filter(&@)
{
my( $code, @vals )= @_;
isa($code,"CODE") or _Croak(
"No code reference given" );
# local( $_ ); # Done by the loop.
for( @vals ) {
$code->();
}
wantarray ? @vals : join "", @vals;
}
sub MapCarE(&@)
{
my $sub= shift(@_);
isa($sub,"CODE") or _Croak(
"No code reference given" );
my $size= -1;
for my $av ( @_ ) {
isa( $av, "ARRAY" ) or _Croak(
"Not an array reference (", _Type($av), ")" );
if( $size < 0 ) {
$size= @$av;
lib/Algorithm/Loops.pm view on Meta::CPAN
}
}
my @ret;
for( my $i= 0; $i < $size; $i++ ) {
push @ret, &$sub( map { $_->[$i] } @_ );
}
return wantarray ? @ret : \@ret;
}
sub MapCarMin(&@)
{
my $sub= shift(@_);
isa($sub,"CODE") or _Croak(
"No code reference given" );
my $min= -1;
for my $av ( @_ ) {
isa( $av, "ARRAY" ) or _Croak(
"Not an array reference (", _Type($av), ")" );
$min= @$av if $min < 0 || @$av < $min;
}
my @ret;
for( my $i= 0; $i < $min; $i++ ) {
push @ret, &$sub( map { $_->[$i] } @_ );
}
return wantarray ? @ret : \@ret;
}
sub MapCarU(&@)
{
my $sub= shift(@_);
isa($sub,"CODE") or _Croak(
"No code reference given" );
my $max= 0;
for my $av ( @_ ) {
isa( $av, "ARRAY" ) or _Croak(
"Not an array reference (", _Type($av), ")" );
$max= @$av if $max < @$av;
}
my @ret;
for( my $i= 0; $i < $max; $i++ ) {
push @ret, &$sub( map { $_->[$i] } @_ );
}
return wantarray ? @ret : \@ret;
}
sub MapCar(&@)
{
my $sub= shift(@_);
isa($sub,"CODE") or _Croak(
"No code reference given" );
my $max= 0;
for my $av ( @_ ) {
isa( $av, "ARRAY" ) or _Croak(
"Not an array reference (", _Type($av), ")" );
$max= @$av if $max < @$av;
}
( run in 0.523 second using v1.01-cache-2.11-cpan-49f99fa48dc )