4.8 可変長のパラメータリスト
実世界のPerlコードでは、任意の長さのパラメータリストをサブルーチンに渡すということがよくあります。
ってことは、引数の数を限定しないサブルーチンを
作ることができる。
そしてそれがよくある、ということですね。
そういう関数を他の言語で書いた経験はないのですが、
よく考えるとそれは私の書いてきたプログラムのジャンルが
偏っていたから、ということに尽きるような気がします。
だってこうしなきゃ実現できない処理、
または実現が面倒になる処理って
たくさんありそうだから。
それはさておき、以下の引数の大きい方の値を求める関数max*1を
引数を何個でも受け取れるように改良した例文が載っていたので
動くように変更して練習。
(予定外の値を入力された場合の処理なし)
- 引数2個の場合。
#!/usr/bin/perl -w
use strict;print "2行にわけて数字を2つ入力して下さい。:\n";
int &max(); sub max {
my($a, $b) = @_;
if($a > $b) { $a } else { $b }
}
- 引数を何個でも受け取れる場合。
#!/usr/bin/perl -w
use strict;print "改行して数字を複数入力して下さい。:\n";
print &max(
); sub max {
my($max_so_far) = shift @_;
foreach (@_) {
if ($_ > $max_so_far) {
$max_so_far = $_;
}
}
$max_so_far;
}
後者は最高水位線というそう。
Perlではこう書けるんだな、という好例。
また、空のパラメータリストが与えられた場合についても
4.8.2で説明してあります。
そういうことよくありそうですもんね。
上記の&maxの場合は、戻り値がundefになる、と。
*1:等しい場合の処理が中途半端だけど、原文そのままで。