sub NAME BLOCK
渡した引数は全て配列 @_
、
すなわち $_[0]
, $_[1]
,... に入る。
配列 @_
はローカルな配列だが、
その値は実際のスカラーパラメータへの参照となっている。
サブルーチンの返り値は最後に評価した expression の値であり、
配列値でもスカラー値でもよい。
また、値を返してサブルーチンから抜けることを指示するために、
return
宣言を使ってもよい。
ローカル変数を作る方法は、local
演算子の項を参照のこと。
See section local.
サブルーチンは do
演算子または &
演算子を用いてコールする。
例:
sub MAX { local($max) = pop(@_); foreach $foo (@_) { $max = $foo if $max < $foo; } $max; } ... $bestday = &MAX($mon,$tue,$wed,$thu,$fri);
例:
# 行を受け取り、スペース類で始まる継続行を結合する
sub get_line {
$thisline = $lookahead;
line: while ($lookahead = <STDIN>) {
if ($lookahead =~ /^[ \t]/) {
$thisline .= $lookahead;
}
else {
last line;
}
}
$thisline;
}
$lookahead = <STDIN>; # 最初の行を得る
while ($_
= do get_line()) {
...
}
引数に名前をつけるには、ローカルなリストへ配列代入を行う。
sub maybeset { local($key, $value) = @_; $foo{$key} = $value unless $foo{$key}; }
こうすることで、参照呼び出しが値呼び出しになる。 なぜなら、代入により値がコピーされるからである。
サブルーチンは再帰的に呼び出してもよい。
サブルーチンを &
形式で呼び出す場合は引数のリストはつけなくてもよい。
これを省略すると、サブルーチンの配列 @_
のセットアップは行われない。
コールを行った時の配列 @_
がサブルーチンから参照できる。
do foo(1,2,3); # 3 つの引数を渡す &foo(1,2,3); # 同じ do foo(); # ヌルリストを渡す &foo(); # 同じ &foo; # 引数を渡さない -- より効率がよい