perlの二次元配列の作り方がさっぱり - 誰か助けて orz

配列を配列に push していきたいのです。 擬似コード的には以下の通り

@parent;

@tmp = (1, 2, 3);
push(@parent, @tmp);
@tmp = (4, 5, 6);
push(@parent, @tmp);

// parent は 以下の構造になって欲しい
//
// 1 2 3
// 4 5 6

しかしこれでは、全ての要素が1次元でつながってしまうわ、以下のように力業やってもどうも動かないわ…

@parent[$#parent] = ();
for($i = 0; $i < 3; ++$i)
{
    $parent[$#parent][$i] = $tmp[$i];
}

//
@record = @parent[0];
foreach $t (@record)
{
  print $t, "\n"; # 配列のアドレスらしきモノが出力される。ARRAY(0x3ea324) とか。
}


perl が本当によく分からない… orz

どなたか解決方法ご存じでしたら、ご教示お願い致します…ううう orz



追記 - やりたいこと - 記事自体はその日に書いていたのに、公開が偉い後々に…^^;

やりたいことはぶっちゃけ

 CSV ファイルの読み込み

なんっすね。

@record_list;

# ↓CSVファイルの1行が入ってるとする
$record;
@split_data = split(/,/, $record);

# これでは record_list に split_data の要素が追記されて
# 1次元で管理されてしまうのでアウト
# ※↓の java のコード参照
push(@record_list, @split_data);
// コレを期待した
list<Object> record_list = 略;
String[]     split_data  = record.slipt(",");
record_list.add(split_data);


// 現実はコレだった orz
list<Object> record_list = 略;
String[]     split_data  = record.slipt(",");
foreach(String str : split_data)
   record_list.add(str);

色々試行錯誤下結果

# これだと1次元的に record_list に入ってしまうが
push(@record_list, @split_data);

# 参照を代入すれば、とりあえず何とかなる
push(@record_list, \@split_data);



# で、取り出し方で大失敗していたようで、結局こうなった
foreach $record (@record_list)
{
  foreach $t (@$record)
  {
    print $t, "\n";
  }
}

# @$ は初めて知ったよ… orz

色々ご迷惑おかけしました…^^;
>各方面




…しかし、スクリプト系言語で「リファレンス」と「デリファレンス」が出てくるのは何か間違ってるような………



rayfill さんの記事を読んで

http://d.hatena.ne.jp/rayfill/20080826#1219724506 こちらより

    push (result, [@columns]);

これは正直感動した。すごい。 ただ知らないと絶対に読め無い気もする…

さすが書いた人しか分からない言語と言われているだけあるぜ!(ぉ