第2章、第3章と、Perlの基本的なデータ型であるスカラーと配列について見て来ました。 この章では、データ型の最後、ハッシュについて紹介します。 ハッシュは別名を連想配列といい、ある種配列に似ています。 第3章で扱った配列との大きな違いは、配列はインデクスという0から始まる整数によって、特定の値を参照したり、種々の演算をしたりしていたのに対し、ハッシュの場合、「キー」と呼ばれる文字列によって、個々の値へアクセスするという点です。 そのため、ハッシュの個々の値には順序はありません。
ハッシュをつくるには、
%hash
のように書きます。 ハッシュの先頭は%(半角パーセントマーク)です。 その次に続くのがハッシュ名です。 ハッシュ名にはアルファベットと数字、それにアンダースコア(_)が使えます。 またスカラー、配列と同様、英文字の大文字と小文字は区別します。 さらに、しつこいようですが$nameと@name、%nameは名前はみんな同じでも、別々の物として扱ってくれます。
次に、ハッシュにキーと値のリストをセットすることを考えましょう。 品物をキーとし、値段を値とするハッシュを作ります。 対応表は以下のとおりです。
品物 | 値段 |
---|---|
bread | 80 |
milk | 50 |
salad | 100 |
上の表をもとにしてハッシュ%menuを作るには、
%menu = ("bread", 80, "milk", 50, "salad", 100);
のように、キーと値を交互に書きます。 ですが、これではキーと値の対応関係がハッキリしないので、Perl5からは、
%menu = (
"bread" => 80,
"milk" => 50,
"salad" => 100,
);
という書き方もサポートされました。
また空のリストを代入することも出来ます。 これはハッシュを初期化するときに使います。
%empty = ();
さらに、ハッシュのキーと値を、配列に代入することも出来ます。
@menu = %menu;
ただし、上にも書いたようにハッシュのキーと値の組には順序はありません。 なので上の結果は、ハッシュに代入したときと同じになるとは限りませんし、上と同じことを3回行ったときには、3回ともばらばらの順番で、キーと値の組がセットされます。
ハッシュの個々の値にアクセスするには、
$menu{"bread"}; #値80にアクセス
$menu{"milk"}; #値50にアクセス
$menu{"salad"}; #値100にアクセス
のように書きます。 $の後にハッシュ名を書いて、その後にアクセスしたい値のキーを{ }で囲んで書きます。 また新たに要素を追加するには代入演算子=を使います。
$menu{"juice"} = 80; #キー"juice"に値80をセット
値を変更するときも同様です。
さて、第3章で登場したスライス。 覚えてますか? スライスは配列の複数の値にアクセスする時に使うものでしたが、実は、ハッシュにも使えます。 例えば、
@menu = @menu{"bread", "milk"};
とすると、左辺の@menuには、ハッシュ%menuのキー"bread"、"milk"に対応する値(50と100)がセットされます。 右辺で%ではなく@を使っているところに注意してください。
さて、この節ではハッシュの作り方と、個々の値へのアクセスについて書いてきました。 次の節ではハッシュを操作する関数をいくつか紹介します。