サブルーチン
とうとうここまで来てしまいましたね。この辺からは実際のスクリプトの作成でとても重要ですので、ようく理解して下さい。サブルーチンは名前こそ違え、どんな言語にも出てくる処理方法です。
プログラム書いていると、同じような処理が何度も出て来る事があります。こんな時は、その一連の処理をまとめて「サブルーチン」化し、必要に応じてその処理を呼び出すようにします。そうすれば何度も同じ処理を書かなくて済み、スクリプトもすっきりしたものになる訳です。
サブルーチンの定義
サブルーチンは、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"; }
処理の制御 前へ
次へ ファイル操作