KAIHATSUGIKEN GROUP

PERL PROGRAMMING LANGUAGE



*************************************************************************************
5 関数定義

利率が何%であれば10年で貯金が倍増するかを調べるプログラムは
どうするのでしょうか?
考え方としてはまず利率を1%にして10年後の残高を計算します。
その利率で倍になっていなければ利率を2%にします。
倍になっていればその結果を表示します。
要するに利率が何%ならば10年後に貯金が倍になるかというプログラムです。

$riritsu = 1;
while(zandaka(10000,$riritsu,10)<20000){
	$riritsu++;
}
print"$riritsu % nara 10 nen de baizoushityaimasu yatta-.\n";

となります。
ここではforでなく whileを使ってみました。
元金を10000円にして10年後に20000円にならないうちは
ずーっとループして20000円以上になったらwhile loopを抜けて結果を表示します。

では関数定義の仕方ですが、subを使って書きます。

sub zandaka{
	my($zandaka,$riritsu,$nen) = @_;
	my($i);
	for($i = 0; $i < $nen; $i++){
		$zandaka *=(1 + $riritsu/100);
	}
	return $zandaka;
}
となります。

subの次に関数名を書きその後ろに{}で囲みます。
zandakaと$zandakaは$がついているかいないかを
perlが判断するので関数名と変数名は同じでも構いません。

ところで @_ と言う怪しげなマークはなんでしょう?
ふつうの変数には $ がつきました。
@_ は いくつもの変数が入るときに配列変数のことを表します。
$zandaka $riritsu, $nen が順番に格納されます。

myはそのブロックのローカル変数を作っています。
結局この行を実行すると1つ目の引き数がローカル変数$zandakaに代入され
同時に2つ目、3つ目の引き数がそれぞれローカル変数$riritsu,$nenに代入されます。
my($i) はなんでしょう?
perlでは $i をグローバル変数からローカル変数に変換します。