
|
if
2002/07/14 作成 ----------- if ほとんどの人が始めに覚える制御文。 本とかでも必ずと言っていい程最初に説明されている制御文。 「if」日本語にすると「もし」。 条件式が「真」なら指定した処理を実行する という「条件分岐」です。
$a = 20;
なんのヒネリも無いつまらない例ですが…if( $a > 10){ print "aは10よりおっきい"; } 「$a > 10」→「変数$aの値が10より大きければ」という条件式が成り立てば(真になれば)、 {}でくくられた部分を実行します。(「aは10よりおっきい」と出力する)
$a = 20;
if文の中にif文を入れる事も出来ます。これを「入れ子」とか「ネスト」とか言います。if( $a > 10){ print "aは10よりおっきい\n"; if( $a < 30){ print "aは30よりちいさい\n"; } } この場合、 aは10よりおっきい aは30よりちいさい と出力されますね。 |
|---|
|
if-elseif-else
2002/07/14 作成 ----------- if文では「条件式が成り立った時だけ処理」していたが、いくつか条件を決めて複数の処理に分岐させる場合は「elseif」と「else」を使う。
$a = 5;
変数$aが10よりおっきかった場合は「aは10よりおっきい」と出力し、それ以外は「aは10以下」と出力する。if( $a > 10){ print "aは10よりおっきい"; } else{ print "aは10以下"; } この場合$aの値は5なので、「$a >10」の条件は成り立たない。elseの{}の中身の処理を実行する事になる。(「aは10以下」と出力)
$a = 25;
「elseif」を使う事で更に多くの処理に分岐できる。if( $a < 10){ print "aは10よりちいさい"; } elseif( $a < 20){ print "aは10以上で、aは20よりちいさい"; } elseif( $a < 30){ print "aは20以上で、aは30よりちいさい"; } else{ print "aは30以上"; } この場合… 「$aは10より小さい」という条件が成り立たなかったので次の条件へ移る。 「$aは20より小さい」という条件が成り立たなかったので次の条件へ移る。 「$aは30より小さい」という条件が成り立ったので、処理する。 というかんじ。 |
|---|
|
unless
2002/07/14 作成 ----------- if文の逆です。 条件式が成り立たなかった場合(偽の場合)に処理します。
$a = 20;
if(!($a > 10)){ print "aは10よりおっきい"; }
$a = 20;
どちらも同じ事。unless( $a > 10){ print "aは10よりおっきい"; } この場合両方とも{}内は実行されません。 (前者の方が分かりやすいと僕は思う) |
|---|
|
while
2002/07/14 作成 ----------- 繰り返し(ループ)処理です。 指定した条件式が真の間、{}内の処理を繰り返し実行します。
$a = 1;
変数$aの値が10以下の間、繰り返します。while($a <= 10){ print "a = $a\n"; $a++; } a = 1 a = 2 a = 3 a = 4 a = 5 a = 6 a = 7 a = 8 a = 9 a = 10 と出力。 |
|---|
|
until
2002/07/14 作成 ----------- whileの逆です。 指定した条件式が偽の間、{}内の処理を繰り返し実行します。
$a = 1;
while(!($a > 10)){ print "a = $a\n"; $a++; }
$a = 1;
どちらも同じ意味。until($a > 10){ print "a = $a\n"; $a++; } $aが11になった時点でループを抜けます。 (これも前者の方が分かりやすいとおもう。) |
|---|
|
for
2002/07/14 作成 ----------- これも繰り返しですが、whileとは少し書式が違います。
for( $cnt = 1; $x <= 3; $cnt++){
for(ループカウンタの初期化; 条件式; ループカウンタの加減)print "cnt = $cnt\n"; } となっています。 ループカウンタの初期化は最初だけ行われます。そして、回ってくる度にループカウンタの加減が行われ、条件式が偽になるまでループします。 この場合、 cnt = 1 cnt = 2 cnt = 3 と出力される事になります。 いろいろ試してみてくださいませ。 |
|---|
|
foreach
2002/07/14 作成 ----------- 配列等の中から要素を取り出しながら、繰り返し処理を行います。 指定した配列等の要素が無くなった時点でループを抜けます。
$cnt = 0;
配列@tableから$bufに1つずつ順番にデータを代入していきます。@table = (1,2,3); foreach $buf (@table) { print "table[$cnt] = $buf\n"; $cnt++; } この場合、 table[0] = 1 table[1] = 2 table[2] = 3 と出力されます。 変数$bufは省略する事もできます。
$cnt = 0;
この場合、配列から取り出されたデータは特殊な変数「$_」に勝手に格納されます。@table = (1,2,3); foreach (@table) { print "table[$cnt] = $_\n"; $cnt++; } |
|---|
|
do
2002/07/14 作成 ----------- 制御文の書き方の順番を変える事ができます。
if( $a > 10){ print "aは10よりおっきい";}
↓
do { print "aは10よりおっきい";}if( $a > 10);
|
|---|
|
ループ制御文
2002/07/14 作成 ----------- ループを途中で抜けたりなんだりします。 ・last ループを抜けます。 ・next 条件式の判定へ戻ります。 ・redo 条件式の判定をせずにループの先頭へ戻ります。 |
|---|