Go to the first, previous, next, last section, table of contents.

サブルーチン

サブルーチンは次のように宣言する。

        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 first, previous, next, last section, table of contents.