8.関数、サブルーチン

Perlでは、C言語などのように関数とサブルーチンを区別しません。基本的には全て関数とのことです。
一般的には、処理だけを記述した部分をサブルーチンで、処理を実行しその結果を返すものが関数といいます。
しかし、Perlでは全てのサブルーチンで最後に処理された変数の値を返します。その値を使うか使わないかはプログラム作成者の使い方次第で決まります。

1.関数の記述方法

関数は、sub キーワードで始まるブロックで記述します。
Ex:
sub Function {
   local ($a) = 1;
   local ($b) = 2;
   local ($c) = $a + $b;
   $c;
}
Function は作成者が付けた関数名です。ここは、処理したい内容に応じて後で見た時に分かりやすい名前を付けるとよいでしょう。
関数内では local ステーメントを使用して関数内だけの変数を使うことができます。
上記の場合は、ローカル変数として値の格納、計算を行いその結果である $c を他で参照できるように返しています。

2.関数の呼び出し方法

関数を呼び出す場合は、呼び出す関数名の前に「&」を付けます。
Ex
$value = &Function;
この場合、関数 Function の戻り値は スカラ変数である $value に格納されます。
サブルーチンの場合は戻り値を必要としないので、単に下のような書き方で制御をサブルーチンに渡すことができます。
Ex
&Function;

3.引数の渡し方

関数やサブルーチンに引数を渡し、計算をさせることもできます。
引数には実数だけでなく、スカラ変数や配列を渡すこともできます。
Ex   -> サブルーチンの場合
&Function (5);
Ex   -> 関数の場合
$value = &Function (5);
$value = &Function ($data);
$value = &Function (@DATA);

4.引数の処理方法

関数やサブルーチンが引数つきで呼び出された場合、呼び出しに指定した引数は特殊配列変数「 @_ 」に保存されています。
Ex1
sub Function {
  local ($a) = $_[0];
  local ($b) = 3.14159;   
  local ($c) = $a * $c;

  $c;
}
左の例では、1つの引数(呼び出し元の引数の先頭要素)を取得して円周率を掛けています。
そして、結果を返しています。
Ex2
sub Function {
  local ($PARAM) = @_;
  local ($max, $count) = 0;
  foreach $count (@PARAM) {  
    if($count > $max) {
      $max = $count;
    }
  }
  $max;
}
左の例では、渡された配列変数の要素を1つづつ調べて、その最大値を返しています。
Ex3
sub Function {
  local ($a, $b) = @_;
  local ($c) = $a * $b;  
  $c;
}
受け取った2つの引数を掛けた結果を返しています。
もちろん、呼び出す方の引数の数をしっかり把握して書かかないといけないですけどね。

戻る

サイトトップへ