$ perl -le' my @array = (1, 2, 3, 4, 5, 6, 7, 8); my @new_array = map{ [$array[2 * $_ - 1], $array[2 * $_]] } 1 .. @array/2; use Data::Dumper; print Dumper \@new_array; ' $VAR1 = [ [ 2, 3 ], [ 4, 5 ], [ 6, 7 ], [ 8, undef ] ];