The MapCar family in Algorithm::Loops does this. The different MapCar subs handle arrays of mismatched length differently.
use Algorithm::Loops qw( MapCar );
my @array1 = qw( one two three );
my @array2 = ( 1, 2, 3 );
my @combined = MapCar { join ':', @_ } \@array1, \@array2;