sub NAME; # 「前方」宣言 sub NAME BLOCK # 宣言かつ定義
use PACKAGE qw(NAME1 NAME2 NAME3);
&NAME # その時点の @_ をサブルーティンに渡す。 &NAME(LIST); # & 形式では、引数に括弧が必要。 NAME(LIST); # 括弧があるときには & はなくてもよい。 NAME LIST; # 宣言済み/インポート済みのとき括弧はなく # てもよい。
サブルーティンに渡された引数は、配列 @_ (すなわち $_[0], $_[1], ...) と
して参照できます。配列 @_ はローカルな配列ですが、その値は実際のスカラ
引数へのリファレンスです。サブルーティンが返却する値は、最後に評価された
値であり、リスト値である場合も、スカラ値である場合もあります。これとは別
に、return 文を使うと、返却する値を指定して、サブルーティンから抜けるこ
とができます。ローカルな変数を作るには、See section 組み込み関数,の
local()
演算子と my()
演算子を参照してください。
サブルーティンは、"&" という記号を頭に付けて呼び出すことができます。Perl
5 では、"&" はなくてもよく、宣言済みのときには、括弧も省略できます。(た
だし、defined()
や undef()
の引数として使う場合のように、
サブルーティンを名指しするときには"&" は省略できないことに気を付けてくだ
さい。また、サブルーティン名や、&$subref()
や &{$SUBREF
()}
構造を使ったリファレンスでサブルーティンの間接呼び出しをするときにも省略
できません。さらには、See section リファレンスとデータ構造のネスト,を参照して
ください。)
例:
sub MAX { my $max = pop(@_); foreach $foo (@_) { $max = $foo if $max < $foo; } $max; } ... $bestday = &MAX($mon,$tue,$wed,$thu,$fri);
例:
# 空白で始まる行をつなげて、1 行入力する sub get_line { $thisline = $lookahead; LINE: while ($lookahead = <STDIN>) { if ($lookahead =~ /^[ \t]/) { $thisline .= $lookahead; } else { last LINE; } } $thisline; } $lookahead = <STDIN>; # 最初の行を先読み while ($_ = get_line()) { ... }
形式引数に名前を付けるには、ローカルリストへの配列代入を行ないます:
sub maybeset { my($key, $value) = @_; $foo{$key} = $value unless $foo{$key}; }
代入では値をコピーしますから、参照呼び出しのサブルーティンを値呼び出しの サブルーティンに変える働きもあります。
サブルーティンは再帰的に呼び出すこともできます。サブルーティンを "&" 形 式で呼び出す場合、引数リストは省略できます。省略した場合には、そのサブルー ティンに対しては、@_ 配列が設定されません。呼び出し時点での配列 @_ が、 そのままサブルーティン側でも見えることになります。
&foo(1,2,3); # 3 つの引数を渡す foo(1,2,3); # 同じ foo(); # 空リストを渡す &foo(); # 同じ &foo; # 何も渡さない (より効率的)
Go to the first, previous, next, last section, table of contents.