ハッシュの宣言と要素へのアクセス

広告

変数や配列の場合と同じくハッシュを使用する場合も宣言を行います。変数の場合はプレフィックス名して「$」を使用し配列の場合は「@」を使用しますがハッシュの場合は「%」を使用します。

%ハッシュ名

例えばハッシュ名として「name」を使ったハッシュを宣言する場合は次のようになります。

my %name;

ハッシュは配列と同じく複数の値を管理しており、1つ1つは要素と呼ばれ要素はそれぞれ変数です。要素に対する扱いは配列と同じく1つの値を管理できる変数をまとめて管理することにより複数の値を管理できるようになっています。

1つのハッシュで管理できる要素数も制限はありません。また宣言時に要素数を指定する必要もありません。

ハッシュへの値の格納と取得

ハッシュではキーと値をペアで登録します。配列の場合と異なりハッシュでは格納された値に順序はありません。複数の値が格納されている時にどんな並びで格納されているかは決まっていません。その代わり値に対するキーを同時に登録し、格納された値はキーを指定することにより取り出します。

その為、1つのハッシュでは同じキーを重複して使用し別の値を登録することは出来ません(値は重複していても構いません)。

具体的にハッシュに値を格納するには次のように行います。

$ハッシュ名{キー} = 値;

ハッシュに含まれる要素は1つ1つが変数ですので、キーを指定して値を格納する場合は、プレフィックスが「%」ではなくて「$」となりますので注意して下さい。配列の場合はインデックスを[]で囲いましたがハッシュの場合はキーを{}で囲います。

キーには任意の文字列を指定します。文字列そのものだけではなく、文字列が格納された変数なども指定できます。

my %name;

$name{'山田'}= "太郎";

my $str = "鈴木";
$name{$str}= "一郎";

配列の場合と異なり順序がありませんので、新しいキーに対して値を設定すると要素が自動的に追加されます。既にあるキーに対して値を設定すれば格納されていた値が上書きされます。

要素に格納された値を取得する場合も変数や配列の場合と基本的に代わりありません。ハッシュの要素の場合は「$ハッシュ名{キー}」で参照できます。

my %name;

$name{"鈴木"}= "一郎";
$name{'山田'}= "太郎";

print "$name{'山田'}¥n";

サンプルプログラム

では簡単なプログラムで確認して見ます。

test2-1.pl

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my %names;

$names{"鈴木"}= "一郎";
$names{'山田'}= "太郎";

my $name = "山田";
print "$names{$name}¥n";

上記を「test2-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。

ハッシュの宣言と要素へのアクセス

( Written by Tatsuo Ikura )