動的にハッシュの配列を作成
動的にハッシュの配列
以下は、一行目に見出し項目行があり、2行目以降にデータがあるcsvデータを
標準入力から読み込んで見出し項目をハッシュキーにして行データを配列に格納します。
#!/usr/bin/perl -w use strict; # 変数宣言 my (@a, $i, $j, @item, @itemdata, %linedata); # 変数初期化 @a=(); @item=(); @itemdata=(); %linedata=(); #標準入力から読み込み while () { chomp(); if ($#item == -1) { #一行目の見出し項目行の処理 @item = split(","); #ハッシュのキー項目を取得 } else { @itemdata = split(","); for $j (0 .. $#item) { $linedata{$item[$j]} = $itemdata[$j]; #ハッシュを作成 } # 無名ハッシュを中括弧するとそのリファレンススカラー値を返す。 push (@a, { %linedata }); } } # ハッシュの配列を取り出す for $i (0 .. $#a) { for $j (sort keys %{$a[$i]}) { print '$a[' . $i . ']{' . $j . '}=' . $a[$i]{$j} . ' '; } print "\n"; }
push (@a, { %linedata });の { %linedata }は、%linedataのリファレンスでなく、
%linedataが展開されたデータについての無名ハッシュのリファレンスになります。
ちなみに、%linedataのリファレンスは、\%linedataです。
また、ちなみにpush関数は、配列の最後の要素にデータを押し込む関数です。