PDSC #3 実用例 :  
リストのハッシュ

Tom Christiansen 著
< tchrist@perl.com >

リリース 0.1 (未テスト,誤植の可能性あり)
1995年10月1日(日)


リストのハッシュの宣言:


    @LoH = ( 
           { 
              Lead      => "fred", 
              Friend    => "barney", 
           },
           {
               Lead     => "george",
               Wife     => "jane",
               Son      => "elroy",
           },
           {
               Lead     => "homer",
               Wife     => "marge",
               Son      => "bart",
           }
     );

生成:

    # ファイルからの読み取り
    # フォーマット: LEAD=fred FRIEND=barney
    while ( <> ) {
        $rec = {};
        for $field ( split ) {
            ($key, $value) = split /=/, $field;
            $rec->{$key} = $value;
        }
        push @LoH, $rec;
    }

    # ファイルからの読み取り
    # フォーマット: LEAD=fred FRIEND=barney
    # 中間の変数はなし
    while ( <> ) {
        push @LoH, { split /[\s+=]/ };
    }

    # "lead","fred","daughter","pebbles"のような
    # キーと値のリストを返す関数を呼び出す
    while ( %fields = getnextpairset() ) 
        push @LoH, { %fields };
    }

    # 同様のものが、間に変数は使わない
    while (<>) {
        push @LoH, { parsepairs($_) };
    }

    # add key/value to an element
    $LoH[0]{"pet"} = "dino";
    $LoH[2]{"pet"} = "santa's little helper";

アクセスと出力:

    # ひとつの要素
    $LoH[0]{"lead"} = "fred";

    # 別の要素
    $LoH[1]{"lead"} =~ s/(\w)/\u$1/;

    # リファレンスを使って全部出力する
    for $href ( @LoH ) {
        print "{ ";
        for $role ( keys %$href ) {
            print "$role=$href->{$role} ";
        }
        print "}\n";
    }

    # インデクスを使って全部出力する
    for $i ( 0 .. $#LoH ) {
        print "$i is { ";
        for $role ( keys %{ $LoH[$i] } ) {
            print "$role=$LoH[$i]{$role} ";
        }
        print "}\n";
    }

    # 一度にまとめて全部出力する
    for $i ( 0 .. $#LoH ) {
        for $role ( keys %{ $LoH[$i] } ) {
            print "elt $i $role is $LoH[$i]{$role}\n";
        }
    }

ご意見、ご要望は、 電子メールまたは 投稿にお願い致します。

ホームページへ戻る。