条件判定; if 文

last-modified: 2nd/June/'01;
since: 1st/June/2001;

もう少し、高度な事をやらせて見ましょう。

プログラム作成では、「条件によって動作を変えること」と、「同じ動作を繰り返すこと」が出来ると、やれる事が広がります。まずは、条件によって動作を変えるサンプルを作成します。

ユーザ判定のサンプル

ユーザ名を入力し、それが登録されているかどうかで挙動を変えるスクリプトです。

id.pl>>

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
#!/usr/bin/perl
#上の行では、 Perl のパスを記述してください。
$login_id = "sugai";
print "Please, enter your name; ";
chomp($name = <STDIN>);
if ($name eq $login_id){
  print "$name さん、ようそこ!\n";
} else {
  print "$name さんは、ユーザに一致しませんでした。\n";
}

6 行目から 10 行目が条件分岐を表す ifです。

[説明]

実行例>>

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
% chmod +x id.pl
% ./id.pl
Please, enter your name; sugai
sugai さん、ようそこ!
%
% ./id.pl
Please, enter your name; manabu
manabu さんは、ユーザに一致しませんでした。
%

1 行目目で id.pl に実行許可属性を与えています。この操作は、 id.pl をカレントディレクトリに置いて実行してください。

if 文

if 文では、条件によって挙動が変化します。if 文の基本的な構造は、次のようになります。

if (条件式1) {
  ブロック1           #条件式1が真ならば実行
} elsif (条件式2) {
  ブロック2           #条件式2が真ならば実行
} elsif(条件式3) {
  ブロック3           #条件式3が真ならば実行
} else {
  ブロック             #全ての条件式が偽ならば実行
}

まず、 if 節中の「条件式1」が真ならば「ブロック1」を実行し、他の全てのブロックは無視します。「条件式1」が偽ならば、次の elsif 節中の「条件式2」を評価し、これが真ならば「ブロック2」を実行し、他の全てのブロックは無視します。このように elsif 節を順番に評価していって、最初に真を返した節中のブロックを実行し、他のブロックは全て無視します。

全ての条件式が偽ならば、 else ブロックを実行します。

elsif, else 節は省略する事ができて、その場合は、 if 条件文が偽ならば、なにも実行されず、スクリプトの後続の行に進みます。

if 文は短ければ 1 行目で書いて構いません。

print $new if ($eps >= $new);

これは、次のように書いたのと同じことです;

if ($eps >= $new) {
  print $new;
}
Copyright: SUGAI, Manabu. Since: 2001
FC2> モビット