前節で作ったスクリプトをちょっと改良して、パスワードも受け取るようにしましょう。 ここではユーザ名をcan、パスワードをnyankoとでもしましょうか(本当は、こんな簡単なパスワードじゃ危ないんですが…)。 そして、入力されたパスワードがnyankoと等しいかどうかを判定するのにif文を使います。
まずはスクリプトを見てください。
01: $username = 'can'; #文字列を代入する時は''か""で囲む
02: $passwd = 'nyanko';
03: print "あなたのお名前なんてーの?:";
04: $yourname = <STDIN>;
05: chomp($yourname);
06: if($yourname eq $username){ #()内が真なら以下を実行
07: #↑文字列の比較には
08: #eq演算子を使う
09: print "よっ、$yournameちゃん、どう?最近。\n";
10: print "パスワード入力:";
11: $yourpasswd = <STDIN>;
12: chomp($yourpasswd);
13: if($yourpasswd eq $passwd){
14: print "OK. 入ってイイよ〜\n";
15: } else{ #条件式が偽の場合ここを実行
16: print "ムム、お主、何やつ!\n";
17: }
18: } else{
19: print "あれ? 名前が登録されてないよ。\n";
20: }
ちょっと長いスクリプトですが、頑張ってみていきましょう。 まず1行目、2行目でユーザ名とパスワードをスカラー変数に代入します。 スカラー変数に文字列を代入する時は''か""で囲みます。 そして、3行目でユーザ名の入力を求め、4行目でそれを受け取って、5行目で最後の改行文字を除きます。 ここまではいいですか?
さて6行目。if文が出てきました。 if文は、( )内の条件式が正しければ(真ならば)、次に続く{ }内を実行し、正しくなければ(偽ならば)else節の{}内を実行します。 else節は省略できます。 その場合、条件式が偽だった時は何も実行されません。
if(条件式){
実行文;
} else{
実行文;
}
今の場合条件は、$yournameの値と$usernameの値が等しいかどうかということです。 つまり、入力されたユーザ名がcanならば、9行目から17行目までを実行し、そうでなければ18,19行目を実行します。
さて、( )内の条件式を見てください。 Perlでは2つの文字列が等しいかどうかを判定するのにeq演算子を用います。
では次。 9行目で軽く挨拶をして、10行目でパスワードの入力を求め、11行目でそれを受け取って、12行目で最後の改行文字を除きます。 そして13行目、ここでパスワードの判定をするためにもう1度if文を使います。 このようにif文の中にまたif文があるというような状況を「if文のネスト」あるいは「if文の入れ子」といいます。
15行目を見てください。ここでelse節が初登場します。 else節は、if文の条件式が正しくなかった時(偽だった時)に実行されます。 今の場合、入力されたパスワードがnyankoではなかった時に「ムム、お主、何やつ!」と表示します。 else節は省略することも出来ます。 その場合、if文の条件式が偽だった時は何も実行されません。
最後に、18,19行目のelse節で入力されたユーザ名がcanでなかった時の処理を書いて、スクリプトは終了です。
ところで、上のスクリプトの所々に#で始まる文字列がいくつかありますね。 例えば7,8行目とか。 Perlでは、#(シャープ)があるところから、その行の行末までをコメントとみなして無視します。 ですからこのように、ちょっと注釈をいれたり、以下の処理の流れを説明したりするのに使えます。 また、Perlはスクリプトの中の空白文字(半角スペース、改行、タブなど)を無視しますので、適当に字下げ(インデント)してスクリプトを読みやすくしておくとイイでしょう。
上のスクリプトの実行結果です。
あなたのお名前なんてーの?:can
よっ、canちゃん、どう?最近。
パスワード入力:nyanko
OK. 入ってイイよ〜
試しに、名前やパスワードをわざと間違えて入力してみてください。