ハッシュ


特徴:複数のものを指定場所へ入れることが出来る!

ハッシュは複数のものを入れることが出来ます。配列と比較したので下記をご覧下さい。

表:1(簡易説明文)

配列の要素と呼ばれる部分をハッシュでは値と呼びます。そしてハッシュではキーという概念も取り入れられます。
表:1(配 列) 表:2(ハッシュ)
配列の要素と呼ばれる部分をハッシュでは値と呼びます。そしてハッシュではキーという概念も取り入れられます。
配列の要素(ハッシュでは値)を取り出すには番号指定します。
例えば、2番目の要素「北海道」を取り出すには、$test[2]と指定すると呼び出せます。
ハッシュの値(配列では要素)を取り出すにはキー指定します。
例えば、2番目の値「北海道」を取り出すには、$test{”出発場所”}と指定すると呼び出せます。
共通点:複数のものが入る・呼び出す先頭記号が($)であること!

さて、表2:の封筒(%test)に入っている値の用紙(2,10、北海道・・・)には、一つ一つもくじ(休暇開始日、休暇時間、出発場所・・・)というキーが付いています。キーとは、一つ一つの値を指定するもくじのようなものです。配列では「1番目の要素・・3番目の要素」と一つ一つ番号で指定しましたが、ハッシュでは下記のように指定します。

表:3(ハッシュの宣言方法)

%test=("休暇開始日","2","休暇期間","10","出発場所","北海道","目的地","九州","交通機関","飛行機");

ハッシュの宣言方法は、最初に「%」を付け、その後にお好きな名前を付けます。要領はスカラー変数と同じです。次に「=」を付け、%testに入る値を書きます。値はキーとペアで記述し、全てをカッコ内に記述します。ダブルクォーテーション(”)で囲みます。こちらではエスケープシーケンスを使用していないので、シングルクォートで囲むこともできます。そして、最後に「これで作業終わりですよ」という(;)を付けます。

配列では、「?番目の要素」という区別しかありませんでしたが、ハッシュではキーで区別します。よって、中身の順番が変わっても違いはありません。表:4をご覧下さい。

表:4(ハッシュの便利機能)

%test=("休暇開始日","2","休暇期間","10","出発場所","北海道","目的地","九州","交通機関","飛行機");
※上も下も全く同じ意味です。これは配列よりも便利です。
%test=("出発場所","北海道","休暇開始日","2","交通機関","飛行機","休暇期間","10","目的地","九州");
しかし、これでは途中の値を探すとき苦労します。ですから・・・・・

表:5(ハッシュの宣言方法)

%test=("休暇開始日"=>"2","休暇期間"=>"10","出発場所"=>"北海道","目的地"=>"九州","交通機関"=>"飛行機");

というように、キーと値の間を「=>」で区切れば読みやすくなりますね。ちなみに「=>」を入れても動作に全く支障ありません。

表:6(ハッシュの値を取得)

$test{”休暇開始日”} と記述すれば、
     =ハッシュ「%test」の中のキー「”休暇開始日”」が付いた値
     =”2” を取得できます。

$test{”休暇期間”} と記述すれば、
     =ハッシュ「%test」の中のキー「”休暇期間”」が付いた値
     =”10” を取得できます。

$test{”出発場所”} と記述すれば、
     =ハッシュ「%test」の中のキー「”出発場所”」が付いた値
     =”北海道” を取得できます。
注意:ハッシュでは、値ではなくキーを取り出す方法はありません。

それでは、スカラー変数の表4:3〜5行目「$c="北海道";$d="札幌";」をハッシュ宣言に・・・・11行目「print "私の生まれは$cの$dです。\n";」をハッシュ取得に書き換えてみましょう。

表:6(スカラー変数表4:をハッシュで置き換えた例)

#!/usr/local/bin/perl

%test=("都道府県"=>"北海道","市町村"=>"札幌市");

print "Content-type:text/html\n\n";

print "<html><head><title>自己紹介</title></head><body>\n";

print "私の生まれは$test{\"都道府県\"}の$test{\"市町村\"}です。";

print '</body></html>';

exit;
結果:私の生まれは北海道の札幌市です。  テストサンプル