sub mapfirst {
my( $sub )= shift( @_ );
&$sub( map { $_->[0] } @_ );
# ^^^^^^^^^^^^^^^^^^ Here is the selection code
}
my @a= ( 1..3 );
my @b= ( 4..6 );
my @c= ( 7..9 );
sub addten { $_ += 10 for @_ }
mapfirst( \&addten, \@a, \@b, \@c );
mapfirst( sub { print "@_\n" }, \@a, \@b, \@c );
####
if( 0 == @_ ) {
&$sub();
} elsif( 1 == @_ ) {
&$sub( $_[0][0] );
} elsif( 2 == @_ ) {
&$sub( $_[0][0], $_[1][0] );
} elsif( 3 == @_ ) {
&$sub( $_[0][0], $_[1][0], $_[2][0] );
# etc to some arbitrary maximum number of arguments
}
####
eval "&\$sub( " . join( ", ", map "\$_[$_][0]", 0..$#_ ) . " )"
####
$av= sub { \@_ }->( @$av, $_->[0] ) for @_;
####
sub mapfirst {
my( $sub )= shift( @_ );
my $av= [];
$av= sub { \@_ }->( @$av, $_->[0] ) for @_;
&$sub( @$av );
## &$sub( map { $_->[0] } @_ );
}
my @a= ( 1..3 );
my @b= ( 4..6 );
my @c= ( 7..9 );
sub addten { $_ += 10 for @_ }
mapfirst( \&addten, \@a, \@b, \@c );
mapfirst( sub { print "@_\n" }, \@a, \@b, \@c );
####
( $x, $y )= ( $y, $x );
####
sub swapPairs { @_[ map $_^1, 0..$#_ ]= @_ }
####
$_= $something for @_;
####
use Algoritm::Loops 'MapCarE';
sub swapValues { MapCarE { $_[0]= $_[1] } \@_, [reverse @_] }