Go to the previous, next section.
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; # 引数を渡さない -- より効率がよい
Go to the previous, next section.