#! perl -slw use strict; use Data::Dump qw[ pp ]; my @data = map[ split ' ' ], ; pp \@data; my @xformed; push @xformed, [ map shift @$_ // (), @data ] while @{ $data[ 0 ] }; pp \@xformed; __DATA__ 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 #### C:\test>1157088.pl [[1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15], [4, 8, 12, 16]] [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]