Perlで2次元配列

LWPが便利だという理由で使っているだけの素人なのでPerlの仕様にいちいちひっかかる*1わけだが、今回ひっかかったのはpush(@arr1,@arr2)で、多次元配列(配列の配列)を素直に作れない点。

 「配列の配列」と言うイミで行けば「@arrTest = (('a','b','c'),('A','B','C'),('i','ii','iii'))」と言う書き方でイケるような気がしますが、そうは問屋が卸さない。
 なぜなら、リスト形式での配列作成の際は、 () 内には全てスカラー値が期待されるため、配列は展開されてしまうからです。
 つまり、上述の「@arrTest = (('a','b','c'),('A','B','C'),('i','ii','iii'))」と言う記述では、単に9つの要素を持つ単次元配列を定義するに過ぎず、つまりコレは「@arrTest = ('a','b','c','A','B','C','i','ii','iii')」と等価です。

なので配列の実体を指すリファレンス(ポインタ)を1次元配列に保持することで、「配列の配列」を実現する。
それには「無名配列」を使う。

my @foo = (['a', 'b', 'c'], ['as', 'bb', 'cc']);
print "$foo[0]->[1]\n";
print "$foo[1][2]\n";

$foo[1]->[2]が$foo[1][2]と書けるのはシンタックスシュガーかしら。

*1:歴史的経緯があるので仕方ないが……。やはり素直にRubyに移行しちゃうか?