Hash

last-modified: 19th/June/'01;
since: 1st/June/2001;

[変数と接頭文字]
$スカラー変数
@配列変数
%ハッシュ

ハッシュとは、「連想配列」とも呼ばれるものです。配列では要素は 0 から始まる番号で参照していました。この番号はインデクスと呼ばれることもあります。ハッシュでは、番号の代わりに文字列で参照できます。

引き出しに番号がついている箪笥が配列で、名前がついている箪笥がハッシュです。詳しくは「変数」を参照ください。

ハッシュは、スクリプトでは % から始まる文字列です。配列に代わって、非常に重宝する、或いは不可欠な場面があるので、是非覚えましょう。

サンプルスクリプトとして、ユーザ名をキーとしてパスワードを格納するハッシュのサンプルスクリプトを作成します。

passes.pl>>

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#!/usr/bin/perl
#上の行では、 Perl のパスを記述してください。
$account{'nawata'} = 'piyopiyo';
$account{'sugai'} = 'hogehoge';
$account{'yasuda'} = 'hoohoo';
$account{'yasumura'} = 'foofoo';
for($i = 0; $i <3; $i++){
  print "\n","user name: ";
  chomp($name = <STDIN>);
  print "pass word: ";
  chomp($pass = <STDIN>);
  if($account{$name} eq $pass){
    print "$name さん、ようこそ!";
    exit;
  }
}
print "パスワードと ID がマッチしませんでした!","\n";

line 4-7:

ハッシュ %account を定義しています。

line 9-18:

for ループで、ブロックを 3 回繰り返します。

line 10-13:

ユーザ名とパスワードの入力を求め、それぞれを $name$pass に代入します。

line 14-17:

ハッシュ %account$name をキーとする値 $account{$name} が入力されたパスワード $pass に一致するかどうかを条件として分岐します。一致すればブロック内を実行します。

line 15-16:

パスワードとユーザ名が一致すれば、メッセージを出力し、スクリプトの実行を終了します。

一致しなければ、 for ループに戻り、 3 回の繰り返しが終了すれば次の行( 19 行目)に至ります。

【予告!】

CGI ではフォームのデータを、環境変数を通してハッシュとして受け取ります。また、一般に UNIX 系のデータベースはデータをハッシュとして扱います。日常的な作業でも、住所録やグロッサリーなどの簡単なデータベースを作成しておくと便利です。

と云う訳で、スクリプトの中にデータを書き込んでしまうのはあまり賢い方法ではありません。そこで、次にファイルからデータベースを読み込み、逐次処理をしていくスクリプトのサンプルを考えます。

Copyright: SUGAI, Manabu. Since: 2001
FC2> モビット