perlの自作サブルーチンの引数についてのメモ

最近「こうすればよかったのか」と思ったことのメモ
perlのサブルーチンでどんな引数が必要かをわかりやすくする方法。


c言語と違ってperlで関数(perlなので以降は『サブルーチン』)を作るには

sub func_hoge
{
   my $arg1 = shift;
   my $arg2 = $_[1];
   *****
}

と書くだけで、引数や戻り値を最初に明示しない。
引数は上記の通り"shift"や"$_[0-9]"で取り出すのがperlならでは。
“shift"や"$_"で引数を取り出すのがソースの最初の箇所とは限らず、
人によっては結構な行数後に引数を取り出すこともあるだろう。
(実際そんなクソコードで苦労している。)
なのでそのサブルーチンが何をするものか知るには、
中のソースを読む必要がありとてもしんどい。非常にしんどい。
そこで、以下のように記述することでどんな引数が必要かは分かるようになる。

sub func_hoge
{
    my ($arg1, $arg2, @arg3) = @_;  # 最初に引数をローカル変数に代入
}

少なくとも引数が何個必要なのかはこれで伝わる。
上記はサンプルなので"arg*"としているが、
引数の名前も工夫すればさらに意図が伝わりやすくなる。
戻り値についてはサブルーチン前にコメントで記しておくのが良さそう。
サブルーチンの名前も分かりやすいものを付けておけば、
サブルーチン名前後の数行を読むだけで処理内容が把握できるソースになるかもしれない。

この記述方法は最近人のソースを読んでいて覚えた。
それから他の人のソースでも実はよく目にすることに気づいた。
いまさらな常識だったのかもしれない。。。

メモperl

Posted by gm2bv