ハッシュと繰り返し処理
配列と同じくハッシュに含まれる要素を順に取り出して処理するといったことはよく行われる処理です。
配列と異なりインデックスで管理されていないため、主にforeach文またはwhile文を使います。まずfor文から試してみます。
foreach文の場合にはハッシュに含まれるキーのリストを作成し順に取り出して処理することになります。次のように記述できます。
my %address = ( "鈴木" => "東京都千代田区", "山田" => "東京都葛飾区" ); foreach my $key(keys(%address)){ print "$address{$key}¥n"; }
「keys」関数は対象となるハッシュに含まれている全てのキーをリストの形で返します。詳しくは「keys関数」を参照して下さい。
キーと値をペアで順に取り出す場合にはwhile文を使います。次のように記述できます。
my %address = ( "鈴木" => "東京都千代田区", "山田" => "東京都葛飾区" ); while (my ($key, $value) = each(%address)){ print "key=$key, value=$value¥n"; }
「each」関数は対象となるハッシュに含まれている要素を順に取り出します。詳しくは「each関数」を参照して下さい。
ハッシュの要素には順序がありませんので、どちらの場合も要素がどのような順序で取り出されるかは分かりません。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my %address = ( "鈴木" => "東京都千代田区", "山田" => "東京都葛飾区" ); foreach my $key(keys(%address)){ print "$address{$key}¥n"; } while (my ($key, $value) = each(%address)){ print "key=$key, value=$value¥n"; }
上記を「test5-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )