KAIHATSUGIKEN GROUP
************************************************************************************
26 制御構造と関数
********************
制御構造
while
perlのwhileはC言語のwhile文よりも高機能です。
まずその一つは
continueブロックをつけることが出来ることです。
continueプロックとは本隊のプログラムが終わった後で実行されます。
for($i=0; $i<10; $i++){
print"$i\n";
}
と言うfor文をcontinueブロックを使うと
$i=0;
while($<10){
print"$i\n";
}continue}
$i++;
}
となります。
二つ目は
next
redo
last
です。
nextは C言語で言うとcontinue
lastはbreakに相当します。
redoはないのですが 結局はその条件のプログラムの先頭に戻ることを表します。
3つ目の機能として
ラベル があります。
ラベルは ループにラベルを付けておいて ジャンプするスタート地点にラベル名を記述します。
そうすると一気にジャンプするという機能です。
Toplevel:
while(1){
while(1){
while(1){
print"deep indide\n";
last Toplevel;
}
}
}
print"Toplevel\n";
となります。
一番最初のToplevel:の最後のコロンに気をつけて下さい。
セミコロンではありません。
逆にwhileの条件を逆にしたuntilもあります。
条件が逆なだけで whileと同じです。
*********************************************
関数
*************
関数を呼び出すときに括弧の中に書いた引き数は全て一つの配列 @_に入った状態で関数に
渡されます。
2つの配列@xと@yを引き数に入れて次のように関数を呼び出したとします。
@x=(1,2,3);
@y=(4,5,6);
sonmefunc(@x,@y);
関数の方では渡された2つの配列を2つのローカルな配列変数@a,@bに入れようと思って次のように
書きます。
sub somefunc{
my(@a,@b)=@_;
省略*****
}
結局 @_の値は(1,2,3,4,5,6) になります。
でも @_の値は@aには全て入りますが@bには何も入りません。
@a (1,2,3,4,5,6)
@b から
となります。
***************************************