無名配列、配列のリファレンスとデリファレンス、ループ処理の練習〜マトリックスを転置しよう

●お題

まず、自分で以下のような配列を作る。

1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
21,22,23,24,25

作った配列を、以下のように転置する。

1,6,11,16,21
2,7,12,17,22
3,8,13,18,23
4,9,14,19,24
5,10,15,20,25

●回答

#! /usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $array = [
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20],
[21,22,23,24,25],
[26,27,28,29,30],
];

foreach(my $j=0;$j<4;$j++){
    foreach(my $i=1+$j;$i<5;$i++){
        #my $a = $array->[$i]->[$j];
        #$array->[$i]->[$j] = $array->[$j]->[$i];
        #$array->[$j]->[$i] = $a;

        #perlだけの技。リストにして置き換える。
        ($array->[$i]->[$j],$array->[$j]->[$i]) = ($array->[$j]->[$i],$array->[$i]->[$j]);

    }
}

print Dumper $array;