- 基礎知識 -
はじめに
必須項目
転送設定
- 変 数 -
スカラー変数
配列説明
ハッシュ説明
- 関 数 -
関数説明
- 演算子 -
演算子
- 構 文 -
構文説明
条件構文
ループ構文
- 正規表現 -
正規表現
マッチング
置換演算子
- サブルーチン -
サブルーチン
- 環境変数 -
環境変数
ハッシュ
特徴:複数のものを指定場所へ入れることが出来る!
ハッシュは複数のものを入れることが出来ます。配列と比較したので下記をご覧下さい。
表: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;
結果:私の生まれは北海道の札幌市です。
テストサンプル