Perlで2次元連想配列を使ってみた

ちょっとしたことから「Perl連想配列って、2次元で使えるのかな?」と気になったので、試してみた。
その結果、ちゃんと使えることが分かったので、まとめておく。

要点

$array{$firstkey}{$secondkey}の場合

foreach $firstkey ( sort keys %array ){
# $firstkeyの要素が取り出せる
}
foreach $secondkey ( sort keys %{$array{$firstkey}} ){
# $secondkeyの要素が取り出せる
}

サンプルスクリプト

$ cat 2d-assocarray.pl
#!/usr/bin/perl
# 2d-assocarray.pl

$array{"1"}{"A"}="A1";
$array{"1"}{"B"}="B1";
$array{"1"}{"C"}="C1";
$array{"2"}{"A"}="A2";
$array{"2"}{"B"}="B2";
$array{"2"}{"C"}="C2";

foreach $firstkey ( sort keys %array ){
  print "firstkey->$firstkey\n";
  foreach $secondkey ( sort keys %{$array{$firstkey}} ){
    print "secondkey->$secondkey\tvalue->$array{$firstkey}{$secondkey}\n";
  }
  print "----------\n";
}

foreach $firstkey ( sort keys %array ){
  $firstkeylist{$firstkey}=1;
  foreach $secondkey ( sort keys %{$array{$firstkey}} ){
    $secondkeylist{$secondkey}=1;
  }
}

foreach $secondkey ( sort keys %secondkeylist ){
  print "\t$secondkey";
}
print "\n";

foreach $firstkey ( sort keys %firstkeylist ){
  print $firstkey;
  foreach $secondkey ( sort keys %secondkeylist ){
    print "\t$array{$firstkey}{$secondkey}";
  }
  print "\n";
}

実行結果

$ perl 2d-assocarray.pl
firstkey->1
secondkey->A    value->A1
secondkey->B    value->B1
secondkey->C    value->C1
                  • -
firstkey->2 secondkey->A value->A2 secondkey->B value->B2 secondkey->C value->C2
                  • -
A B C 1 A1 B1 C1 2 A2 B2 C2