my @column1; my @column2; my @column3; my @column4; while( @array and $array[0] ne '--') { push @column1, shift @array; }; shift @array; while( @array and $array[0] ne '--') { push @column2, shift @array; }; shift @array; while( @array and $array[0] ne '--') { push @column3, shift @array; }; shift @array; while( @array and $array[0] ne '--') { push @column4, shift @array; }; shift @array; for my $row (1..3) { print join "\t", $column1[$row], $column2[$row],$column3[$row],$column4[$row]; print "\n"; }; #### my @column; my $curr_column = 0; my $rows = 0; while( @array and ) { if( $array[0] ne '--' ) { $column[ $curr_column ] ||= []; # a new column push @{ $column[ $curr_column ] }, shift @array; if( $rows < $#{ $column[ $curr_column ] } ) { $rows = $#{ $column[ $curr_column ] }; }; } else { $index++; shift @array; }; }; for my $row (0..$rows) { print join "\t", map { $_->[ $row ] } @column; print "\n"; };