ハッシュとは
複数の値を管理するものとして配列については既に解説しました。配列に格納される要素は順序を持って格納されており、インデックスと呼ばれる数値で管理していました。
複数の値をまとめて管理するためにインデックスを使うのは大変簡潔で便利です。ただ、例えば名前に関連付けて住所や電話番号を管理したい場合には少し面倒です。配列でこのようなことを行うとすれば、まず名前を管理する配列を用意し、ある名前を格納します。そして住所の配列を別途用意し、対応する名前に割り当てられているインデックスを調べ、住所の配列に同じインデックスで名前に対応した住所を格納します。
my @name; my @address; $name[0] = "katou"; $address[0] = "Tokyo";
ただ、このような場合にはハッシュを使うと大変便利です。ハッシュは他のプログラミング言語では連想配列とも呼ばれているもので、複数の値を管理することは配列と同じですが、要素を順に並べてインデックスで管理するのではなく、格納される値に対するキーを別途設定しインデックスの代わりにキーで管理します。
キーには任意の文字列を指定できます。その為、例えばキーに名前を指定しておけば、その名前に対応した値を取り出すことが行えます。例えば先ほどの例をハッシュを使って記述すると次のようになります。
my %address; $address{'katou'} = "Tokyo";
配列ではインデックスを指定していた箇所にキーとなる文字列が指定されています。このようにハッシュではキーと値をペアとして格納していきます。ハッシュから値を取り出す時も同じです。
my %address; $address{'katou'}= "Tokyo"; print "$address{'katou'} ¥n";
配列の場合と比べて「katou」と言う名前に対する住所を取り出すのが直接的で分かりやすくなっています。ハッシュを使うことで、極めて簡単なデータベースのように何かに対応する値を取り出すといったことが用意となります。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my %address; $address{'katou'}= "Tokyo"; $address{'山田'}= "大阪"; print "$address{'katou'} ¥n"; print "$address{'山田'} ¥n";
上記を「test1-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )