Perl 07
制御文
[HOME] - [Perl_Index] - [BACK] - [NEXT]



if
2002/07/14 作成
-----------

if ほとんどの人が始めに覚える制御文。
本とかでも必ずと言っていい程最初に説明されている制御文。

「if」日本語にすると「もし」。
条件式が「真」なら指定した処理を実行する という「条件分岐」です。

$a = 20;
if( $a > 10){
  print "aは10よりおっきい";
}
なんのヒネリも無いつまらない例ですが…
「$a > 10」→「変数$aの値が10より大きければ」という条件式が成り立てば(真になれば)、
{}でくくられた部分を実行します。(「aは10よりおっきい」と出力する)

$a = 20;
if( $a > 10){
  print "aは10よりおっきい\n";
  if( $a < 30){
    print "aは30よりちいさい\n";
  }
}
if文の中にif文を入れる事も出来ます。これを「入れ子」とか「ネスト」とか言います。
この場合、
aは10よりおっきい
aは30よりちいさい
と出力されますね。


if-elseif-else
2002/07/14 作成
-----------

if文では「条件式が成り立った時だけ処理」していたが、いくつか条件を決めて複数の処理に分岐させる場合は「elseif」と「else」を使う。

$a = 5;
if( $a > 10){
  print "aは10よりおっきい";
}
else{
  print "aは10以下";
}
変数$aが10よりおっきかった場合は「aは10よりおっきい」と出力し、それ以外は「aは10以下」と出力する。
この場合$aの値は5なので、「$a >10」の条件は成り立たない。elseの{}の中身の処理を実行する事になる。(「aは10以下」と出力)

$a = 25;
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以上";
}
「elseif」を使う事で更に多くの処理に分岐できる。
この場合…
「$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;
while($a <= 10){
  print "a = $a\n";
  $a++; }
変数$aの値が10以下の間、繰り返します。
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++){
  print "cnt = $cnt\n";
}
for(ループカウンタの初期化; 条件式; ループカウンタの加減)
となっています。
ループカウンタの初期化は最初だけ行われます。そして、回ってくる度にループカウンタの加減が行われ、条件式が偽になるまでループします。
この場合、
cnt = 1
cnt = 2
cnt = 3
と出力される事になります。

いろいろ試してみてくださいませ。


foreach
2002/07/14 作成
-----------

配列等の中から要素を取り出しながら、繰り返し処理を行います。
指定した配列等の要素が無くなった時点でループを抜けます。

$cnt = 0;
@table = (1,2,3);
foreach $buf (@table) {
  print "table[$cnt] = $buf\n";
  $cnt++;
}
配列@tableから$bufに1つずつ順番にデータを代入していきます。
この場合、
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
条件式の判定をせずにループの先頭へ戻ります。





[HOME] - [Perl_Index] - [BACK] - [NEXT]

 









[PR]アナタのウラ県民性をチェック:こっそり一人で?ワイワイ皆で?診断しょ