戻り値
サブルーチンでは呼び出し元に何らかの値を返すことが出来ます。例えばサブルーチン内で計算を行い、その結果である数値を呼び出し元に返すということが可能です。サブルーチンから呼び出し元に返す値を「戻り値」と呼びます。
サブルーチンで戻り値を使用するのに特別な処理は必要ありません。全てのサブルーチンは必ず戻り値を返す処理を行います。今まではそれを呼び出し元で利用していませんでした。
サブルーチンからの戻り値を呼び出し元で使用するには次のように記述します。
変数 = &サブルーチン名;
サブルーチンの呼び出しが行われるた結果、戻り値を変数に格納しています。具体的には次のように記述します。
my $sum; $sum = &calcTwoNum(10, 23); print "$sum"; sub calcTwoNum{ my ($num1, $num2) = @_; $num1 + $num2; }
この場合では変数「$sum」にサブルーチンからの戻り値が格納されます。
戻り値の指定方法
次にサブルーチンではどのような値を戻り値として返すのかを確認します。サブルーチンでは最後に評価された結果を戻り値として返すことになっています。
例えば先ほどのサンプルを見てください。
sub calcTwoNum{ my ($num1, $num2) = @_; $num1 + $num2; }
サブルーチンの最後で変数「$num1」と変数「$num2」を加算しています。加算した結果を他の変数に格納したり出力せずにただ加算だけしています。エラーではありませんが単に計算だけをしているのでサブルーチンの中では意味を持ちませんが、サブルーチンでは最後に行われた計算の結果が戻り値として設定されるためこの加算の結果がサブルーチンの戻り値となります。
このように最後に計算が行われた場合は計算の結果が戻り値となります。単に数値や戻り値などの値が記述してあった場合はその値が戻り値となります。それ以外の処理の場合、処理に応じて評価された結果が戻り値となります。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my ($sum, $str); $sum = &calcTwoNum(10, 23); print "$sum¥n"; $sum = &calcTwoNum(32, 14); print "$sum¥n"; sub calcTwoNum{ my ($num1, $num2) = @_; $num1 + $num2; }
上記を「test6-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )