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