KAIHATSUGIKEN GROUP

PERL PROGRAMMING LANGUAGE



************************************************************************************
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    から

となります。

***************************************