この章ではサブルーチンについて説明します。
前の章で配列やハッシュや文字列を操作する関数について説明しましたが、例えばsubstr関数は切り取った文字列を返すという機能を持った関数でしたね。
これらはPerlの内部機構であらかじめ決められたものです。
しかし、プログラマ自身もsubstrのような機能を持つ関数を作ることが出来るのです。
これがサブルーチンです。
例えばsubstr関数のような切り取った文字列を返すというプログラムを以下のサブルーチンの定義に書いていきます。 ではサブルーチンを使った例と使わない例を較べてみましょう。
以下の例は3科目の平均を求めるプログラムです。
サブルーチンを使わない場合には以下のように書きます。 この「3科目の平均を求めるプログラム」をサブルーチンで定義しますと以下のようになります。
Averageという名前のサブルーチンで3科目の平均を求めるプログラムを作成しましたので、これを実行させるためにはそのサブルーチンを呼び出さないといけません。
呼び出している箇所はです。
ここでは3個の引数をサブルーチン側に渡しています。
サブルーチン側でこれらの引数を受け取るにはという特殊な配列を使います。 「@_」には先頭から順番に引数が入っていますのでという記述で、$kには56が、$sには45が、$eには99が入ります。
この代入が終わりますと後は3科目の平均を求める計算が行われ、が出力されます。
先ほどのサブルーチンを書き替えますと以下のようになります。
次の例を見てみましょう。
この例は引数の合計を行うサブルーチンです。
引数の数は何個でも対応できるサブルーチンです。
サブルーチンの呼び出しはで行われています。
そして、foreachの中では引数の合計を行っています。
しかし、実行した結果を呼び出し側に返す場合に必ずreturn を付けなくてはいけないわけではありません。
以下の例のようにreturnを付けなくても、$sumの値は呼び出し側に戻ります。
つまり、returnを付けない場合にはサブルーチンの最後の値をサブルーチンの呼び出し側に戻すことになります。
次の例を見てみましょう。
このmaxサブルーチンは2つの値の中で大きい方を返してくれます。次の例を見てみましょう。
taxサブルーチンは引数の値を合計して、それに「0.05」を掛けて消費税を求めています。
サブルーチンの中にmyがありますが、これを付けた変数はブロック内だけが有効範囲になり、ブロックの外を出るとその変数の値を得ることが出来なくなります。
ブロックとは「{」から「}」までの間のまとまりの事を言います。 例えばサブルーチンの外で以下のように出力させようと思っても、何も表示されません。 myを付けた変数はサブルーチンに限らず、if文やfor文などブロックがある構文に対してはブロック内だけが有効範囲になります。