Your method is perfect if you are interested in reading particular column or columns of the file. Also, genrally in all programming languages we read the file row by row and not column by column
I can suggest a lame method but that is way to complex. If you are interested in reading the file vertically taking account of all the columns then you could transpose the file and then read it. Something like this:
for my $row (@rows) {
for my $column (0 .. $#{$row}) {
push(@{$transposed[$column]}, $row->[$column]);
}
}
for my $new_row (@transposed) {
for my $new_col (@{$new_row}) {
print $new_col, " ";
}
print "\n";
}
Again it is a lame method.