Perlでハッシュのデータ配列を作成(すぐ忘れるのでメモ)

毛利です。

やり方をいつも忘れてしまうので私的メモ。
1行目が↓こんな感じ、2行目以降がデータ行となってる .csv ファイルを処理。
DoCoModatalink のエクスポートファイル)

"メモリNo","名前","フリガナ","電話1","メール1","郵便番号","住所","メモ","誕生日","URL","会社名","役職名","電話2","メール2","電話3","メール3","電話4","メール4","電話5","メール5","緯度","経度","SIPアドレス1","SIPアドレス2","SIPアドレス3","2in1設定","グループNo","グループ名"

ソース
#!/usr/bin/env perl

use strict;
use Data::Dumper;

my @aryHeader;
my @aryDb;

while(<>){
    s/\"//g && chomp;
    my @data = split(/,/);
    if ( 0 == scalar @aryHeader ){
        @aryHeader = @data;
        next;
    }

    my $refPerson;
    for(my $i = 0; $i < scalar @aryHeader; $i++){
        $refPerson->{$aryHeader[$i]} = $data[$i];
    }
    push(@aryDb, $refPerson);
}

print Dumper(@aryDb);

exit;

※ 推奨コードというわけではありません。なんかいいデータの扱い方があれば教えて下さい
※ 変数名の付け方とか我流。Perl のベストプラクティス買わないとなぁ。読む時間もお金も無いからまた今度。。

Perlベストプラクティス

Perlベストプラクティス

出力例(Dumper)
chmod +x tmp.pl
./tmp.pl data.csv
$VAR400 = {
            'メモリNo' => '215',
            'SIPアドレス2' => '',
            '誕生日' => '',
            'フリガナ' => '*****',
            '住所' => '',
            '郵便番号' => '',
            '経度' => '',
            '電話1' => '090*******',
            'メール1' => '',
            'SIPアドレス3' => '',
            '役職名' => '',
            'グループ名' => '仕事',
            '緯度' => '',
            '電話5' => '',
            'メモ' => '',
            'URL' => '',
            'メール3' => '',
            '電話3' => '',
            '2in1設定' => '',
            'メール2' => '',
            'グループNo' => '4',
            'メール4' => '',
            'メール5' => '',
            '電話4' => '',
            'SIPアドレス1' => '',
            '名前' => '**さん',
            '電話2' => '',
            '会社名' => ''
          };
なぜ忘れるのか
$refPerson->{$aryHeader[$i]} = $data[$i];

↑の部分の処理(リファレンス->{ハッシュキー}=データ)でデータができてしまう(事前にメモリ確保とかが要らない)のに慣れないみたい。


ではでは。