【Perl5】サブルーチン

サブルーチン

文法

sub サブルーチン名{
実行する処理;
}

サブルーチンはプログラム中のどこで定義してもよくて、
「sub」の後に空白を 1 文字空けてからサブルーチン名を記述します。
そして、実行する処理を「{」から「}」で囲まれたブロック中に記述して行きます。
サブルーチンは、複数記述することが出来ます。

サブルーチン名には、
変数と同じくアルファベット・数字・アンダーバー(“_")が使えます。
ただし、先頭に数字は使えません。

print "サブルーチンのテスト\n";

sub hello{
  print "hello\n";
}

sub bye{
  print "bye\n";
}
print "終了\n";
print "サブルーチンのテスト\n";

sub hello{
  print "hello\n";
}

print "サブルーチンのテスト\n";

sub bye{
  print "bye\n";
}
print "終了\n";

Perl のプログラムは、上から下へ順に実行されていきますが、
サブルーチンは、プログラム内からサブルーチンが呼び出されないと実行されません。

サブルーチンの呼び出し方

サブルーチンを呼び出すには、以下のようにします。

&サブルーチン名;

sub サブルーチン名{
実行する処理;
}

Perl 5 では & を省略できます。

サブルーチンの引数

サブルーチンを引数付きで呼び出すには、以下のようにします。
サブルーチンの引数には変数だけではなく、配列やハッシュを渡すこともできます。

文法

&サブルーチン名(引数1, 引数2, …);

sub サブルーチン名{
実行する処理;
}

サブルーチン側で引数を受け取るには、
呼び出し元で設定してした値は、自動的に配列変数「$_」に格納されます。

引数を参照するには、
1 番目の引数は「$_[0]」で、2 番目の引数は「$_[1]」で参照できます。
引数の配列の最大インデックス($#_)をチェックする事によって
処理で制御することによって引数を省略することもできます。

配列変数「$_」だと後からプログラムを見なおしたりする時に
分かりにくい場合もあるかと思います。
なので、引数をサブルーチン側で任意の変数に格納することもできます。

・引数が1個の時

my $name;
($name) = @_;

・引数が複数個の時

my ($name, $old, $address) = @_;

戻り値

サブルーチンからの戻り値を呼び出し元で使うには、以下のようにします。

文法

変数 = &サブルーチン名;

サブルーチン側で戻り値を帰す場合には、
色んなプログラミング言語で「return」を使うことが多いかと思いますが
Perl では、「return」を使わなくても値を返せます。

最後に計算が行われた場合は計算の結果が戻り値となります。
数値や戻り値などの値が記述してあった場合は、その値が戻り値となります。
それ以外の処理の場合、処理に応じて評価された結果が戻り値となります。

「return」を使うこともできて、「return」が実行されると呼び出し元に処理が戻ります。

戻り値無い「return」文を実行してサブルーチンを終了すると、
戻り値として空の値が設定されます。

呼び出し元が値を求めている場合は未定義値「undef」となり、
リストを求めている場合は空のリストとなります。

以下のように戻り値を設定すると呼び出し元に戻り値が返されます。
return 戻り値;

戻り値も値だけでなくて、リファレンスを使うと配列やハッシュも返すことができます。

Perl5入門

Posted by 管理人