While Perl arrays can only be one-dimensionals, each value can be a reference to another array and then it could look like as if it was a 2 or more dimansional array.

If each element of an array is a reference to another array, and if each one of the internal arrays has the same number of elements then it will look like a matrix.

A matrix can be transposed. (Replace the rows by arrays.)


use 5.010;
use strict;
use warnings;
use Data::Dump qw(dump);

my @matrix = (
    [ 'name11', 'name12', 'name13', 'name14' ],
    [ 'name21', 'name22', 'name23', 'name24' ],
    [ 'name31', 'name32', 'name33', 'name34' ],

say dump \@matrix;
my @tr;
for my $row (0..@matrix-1) {
    for my $col (0..@{$matrix[$row]}-1) {
        $tr[$col][$row] = $matrix[$row][$col];
say dump \@tr;

The result looks like this, printing the before and after versions.


  ["name11", "name12", "name13", "name14"],
  ["name21", "name22", "name23", "name24"],
  ["name31", "name32", "name33", "name34"],
  ["name11", "name21", "name31"],
  ["name12", "name22", "name32"],
  ["name13", "name23", "name33"],
  ["name14", "name24", "name34"],