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.