サブルーチン

 とうとうここまで来てしまいましたね。この辺からは実際のスクリプトの作成でとても重要ですので、ようく理解して下さい。サブルーチンは名前こそ違え、どんな言語にも出てくる処理方法です。

 プログラム書いていると、同じような処理が何度も出て来る事があります。こんな時は、その一連の処理をまとめて「サブルーチン」化し、必要に応じてその処理を呼び出すようにします。そうすれば何度も同じ処理を書かなくて済み、スクリプトもすっきりしたものになる訳です。

サブルーチンの定義

 サブルーチンは、sub文を使って定義します。この定義には以下のように、サブルーチンの名前とサブルーチンに渡す引数のリスト、及びサブルーチン内部で行われる処理を記述したスクリプトが必要です。

sub サブルーチン名 {
    処理;
}

サブルーチンの実行

 サブルーチンは、サブルーチン名の前に「&」を付けるか、do関数を使って実行します。サブルーチンの実行の形式は、以下のようになります。

&サブルーチン名 (引数);
do サブルーチン名 (引数);

サブルーチンでの引数

 サブルーチンを呼び出す時に、いくつかの値を引き渡し、その値を使って処理を行いたい場合があります。こんな時に使われるのが、配列「@_」です。Perlのサブルーチンでは、呼び出し時に自動的に引数となる配列@_が用意されます。引数で使われる配列@_の各要素の参照は、通常の配列と同じく添え字でアクセスします。つまり、@_[0]からアクセスされます。実際の例を見てみましょう。

sub print_hello {  この処理を実行すると、@_[0]にMENが
  print "Hello @_[0] !\n"; 呼び出され、
} Hello MEN ! となります。
&print_hello("MEN");  

又、引数は複数の値を取る事が出来ます。

sub print_hello {  結果は、もうお分かりですね。
  print "Hello @_[0], @_[1] !\n"; Hello MEN, WOMEN !
} となります。
&print_hello("MEN", "WOMEN");  

 ここで、サブルーチンの中で@_[2]以上の配列要素にアクセスした場合は、未定義値(undef)が返って来ます。

 サブルーチンの内部では、更に別のサブルーチンを呼び出す事も出来ます。この時は、それぞれのサブルーチン毎に異なる配列@_か用意されます。あるサブルーチンを使っている最中に別のサブルーチンを呼び出すと、それが呼び出される前に現在の配列@_の内容が自動的に保存され、呼び出したサブルーチンから戻って来た時に、配列@_に自動的に保存されていた値が戻されます。具体的には、以下のようになります。

sub print_hello {  
  print "Hello @_[0], @_[1] !\n";  
  &print_hi ("VB", "C");  
  print "Hello @_[0], @_[1] !\n"; ←元に戻っている。
} 実行結果は、
sub print_hi { Hello MEN, WOMEN !
  print "Hi @_[0], @_[1] !\n"; Hi VB, C !
} Hello MEN, WOMEN !
&print_hello("MEN", "WOMEN"); となります。

変数の範囲

 PerlはC言語やJava言語と異なり、変数はデフォルトでグローバル変数となります。ですから、どこで宣言してあっても、どこからでも使えてしまいます。この事は他の言語では見かけないので、注意が必要です。

 あるサブルーチン内だけで使える変数を作りたい場合は、local関数を使います。local関数の後ろに変数を置くと、その変数は属しているサブルーチンの中だけからしか使えません。例えば、以下のように記述します。

sub order {
  local $name = "Jane";
  print "Hello $name.\n";
}

処理の制御 前へ

HOME

次へ ファイル操作