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 );