$ perl -Mstrict -Mwarnings -le ' use constant MAX_COLUMN_INDEX => 2; secondRoutine(firstRoutine()); sub firstRoutine{ my $matrix; while (<>) { my @fields = split; for (0 .. MAX_COLUMN_INDEX) { push @{$matrix->[$_]}, defined $fields[$_] ? $fields[$_] : ""; } } return $matrix; } sub secondRoutine { my $matrix = shift; for my $row (0 .. $#{$matrix->[0]}) { for my $col (0 .. MAX_COLUMN_INDEX) { print "Row $row Col $col = $matrix->[$col][$row]"; } } return; } ' q w e a s z Row 0 Col 0 = q Row 0 Col 1 = w Row 0 Col 2 = e Row 1 Col 0 = a Row 1 Col 1 = s Row 1 Col 2 = Row 2 Col 0 = z Row 2 Col 1 = Row 2 Col 2 =