ループ
while ループ
whileループは最も基礎的な制御構造の一つです。 使い方は簡単!
#!Perl
$a = 0;
while($a < 5){
$a += 1;
print "Value is ",$a,"\n";
}
として実行すると
Value is 1 Value is 2 Value is 3 Value is 4 Value is 5と表示されます。 while 直後の ( ) 内の条件が真である場合に { } 内の式を条件が真であり続ける限り評価し続けます。 このループは非常に有用なのですが、無限ループに陥る場合も多いのでそこは気を付けてください。
while は条件が真の間ループをし続けますが、その反対の動作を行うループも存在します。
#!Perl
$a = 0;
until($a > 5){
$a += 1;
print "Value is ",$a,"\n";
}
として実行すると
Value is 1 Value is 2 Value is 3 Value is 4 Value is 5 Value is 6これは until 直後の ( ) が偽の間ループし続けるというものです。 こちらを使用した方が書きやすい構造もあります。
foreach ループ
foreach のループでは foreach ValueA ( ListB ) という構造になります。 これは ListB=配列等になりますが、それから値を受け取り ValueA に渡します。 ListBの値を渡し終わったらループを終了します。
#!Perl
@a = ("a","b","c","d","e");
foreach $b (@a){
print $b,"\n";
}
として実行すると
a b c d eここでは配列を与えていますが、ハッシュも受付ます。 ただし、ハッシュの場合は要素だけでなくキーも渡してしまうので注意が必要です。
ここでは foreach ValueA ( ListB ) と、渡す値を格納する変数も指定していますが、 多くの場合これを省略してデフォルト変数を使用する事が多々あります。デフォルト変数についてはこちらをご覧ください。ここでは特に説明しませんが、 最初の頃は面倒でもデフォルト変数を使用しないほうが構造を把握しやすいと思います。
for ループ
for ループも perl には存在します。 for ( initA ; sikiB ; syoriC ) という構造になります。 initA の部分で変数を初期化します。sikiB は、ここが真の間処理を繰り返すという条件の部分になります。 syoriC はループが終わる毎に行う処理を定義しています。
#!Perl
for( $i=0 ;$i < 4;$i++){
print "Value is $i \n";
}
として実行すると
Value is 0 Value is 1 Value is 2 Value is 3となります。制御構造は for直後の ( ) を見れば一目瞭然なので使い易いと思います。 と、forを説明したばっかりでこんな事書くと混乱するかもしれませんが、 じつは Perl では for と foreach は等価な制御構造です。
#!Perl
@a = ("a","b","c","d","e");
for $b(@a){
print "$b\n";
}
として実行すると
a b c d eこれを見ると for は foreach とまったく同じ制御を行っています。 この違いを Perl はコードを見て区別しています。 つまり ( ) の中に : が2つあるかどうかを確認してfor か foreach かの制御をおこなっているのです。 ですから、もし他人のコードを見なくてはいけない時は、そこを忘れていると制御構造を見誤る可能性があります。
2008年 11月 1日ドキュメント作成
2008年 11月 2日ドキュメント更新