サブルーチンとは、プログラムの一部をひとまとめにしたものです。サブルーチンにしておくと、同じ処理を行う際に2箇所で同じプログラムを書く必要がなくなり、効率的です。また、違うプログラムを作成する際に再利用しやすいという特長もあります。
サブルーチンはプログラム中の任意の場所で定義できます。サブルーチンの定義は以下のように行います。
sub サブルーチン名 { 処理 }(例) 変数$aと$bの値を足して結果を表示するサブルーチン(あまり実用的ではないです)
sub plus { print $a + $b, "\n"; }
サブルーチンを使うときにはサブルーチンの呼び出しを行います。サブルーチンの呼び出しは以下のように行います。
&サブルーチン名(例) 前例のサブルーチンの呼び出し(前例と同じファイルに書くこと)
$a = 1; $b = 2; + # 結果は3と表示される。 $a = 3; $b = 4; + # 結果は7と表示される。例に使ったプログラムは、決まった変数($aと$b)の値を足すことしかできないので、使い勝手の悪いものとなっています。もう少し使いやすいものにしてみましょう。
引数とは、データをサブルーチンに渡すために設定された変数です。引数をサブルーチンに渡すには、以下のような形になります。引数としてスカラー値や変数を渡すことができます。
&サブルーチン名(引数1、引数2、…)Perlでは、渡された引数は、サブルーチン内では配列@_の要素になっています。したがって、ここの要素を参照するには、$_[0]、$_[1]、…を使うことになります。
(例) 足し算の結果を表示するプログラム
sub plus { print $_[0] + $_[1], "\n"; # 引数1と引数2の値を足して表示 } # 以下、サブルーチンの呼び出し &plus(1,2); # 3と表示される。 &plus(3,4); # 7と表示される。 $a=5; &plus($a,6); # 11と表示される。
サブルーチンからデータをもらうためには戻り値を使います。戻り値はreturn文で指定します。return文は以下の書式になります。
return 戻り値return文を使用しない場合には、サブルーチンの最後に実行した式の値が戻り値になります。戻り値を意識するために、return文を使うことをお勧めします。
(例) 足し算するサブルーチン(あまり意味はないですね)
sub myplus { return $_[0] + $_[1]; # 引数1と引数2の値を足して戻り値として返す。 } # 以下、サブルーチンの呼び出し $a=&myplus(1,2); print $a; # 変数$aにサブルーチンの戻り値を代入。3と表示される。 print &myplus(&myplus(1,2),3); # サブルーチンの戻り値を表示。6と表示される。
AsPerlは良く使うプログラムをひな型として使うことができます。ひな型は自分で追加したり編集したりすることができますが、K棟では他の人と共通で使用するので追加・編集はやめておきましょう。
- AsPerlの「ひな型」メニューから「#で始まる項目」を選択します。
- プログラムが挿入されるので必要に応じて編集します。サブルーチン化されているものはサブルーチンの呼び出しで利用できます。
練習問題の答