Perl 再入門 : サブルーチンの基礎まとめ
Perl における関数は、サブルーチンと表現され、sub
で宣言する。今回はこのサブルーチンに関しての仕様を押さえておく。
目次
Perl におけるサブルーチンの引数の処理
- 引数が1つの場合
- 配列を単独の変数に格納しようとすると、配列の要素数が代入されてしまうため、要素が1つの配列に代入するように書く
sub mySub {
my ($name) = @_;
}
- 引数が複数の場合
@_
を各変数に展開させれば良い
sub mySub {
my ($name, $age, $address) = @_;
}
要するに引数の数に関わらず my ($arg) = @_;
と書くのが良さそうだ。
そういや、Perl は return
文を省略できる。最後の計算結果や文字列を戻り値として認識するのだ。
サブルーチンの入れ子はできる?
以下の文献によると、あるサブルーチンの内部にあるサブルーチンが、別のサブルーチンから呼べてしまうようで、サブルーチンを入れ子にすることでスコープを作ることはできないようだ。
sub hoge {
sub fuga {
print "fuga";
}
print "hoge";
}
# hoge() 内の fuga() が呼べてしまう
sub another {
fuga();
}
コレだと入れ子にする必要もない、というか、入れ子にすることで実現したい、サブルーチンのスコープが作れなくなる。
そんな時は、代わりに local *inner = sub {}
と書くのが良い。
sub hoge {
print "hoge";
# ローカルなサブルーチンを宣言する
local *fuga = sub {
print "fuga";
};
fuga();
}
sub foo {
fuga(); # 構文エラーにはならないが何も起こらない (上述のサブルーチンは呼べない)
}
hoge(); # 内部の fuga() も実行され、「hoge fuga」と出力される
fuga(); # 何も起こらない
foo(); # 結果、何も起こらない
こんな感じ。