サブルーチンから戻り値を返す

サブルーチンを呼び出したあと、サブルーチンから呼び出し元に何らかの値を返すことができます。例えばサブルーチン内で計算を行い、その結果である数値を呼び出し元に返すことができます。サブルーチンから呼び出し元に返す値を「戻り値」と呼びます。ここでは Perl のプログラムでサブルーチンから戻り値を返す方法について解説します。

(Last modified: )

サブルーチンから戻り値を返す

サブルーチンでは呼び出し元に何らかの値を返すことができます。例えばサブルーチン内で計算を行い、その結果である数値を呼び出し元に返すということが可能です。サブルーチンから呼び出し元に返す値を「戻り値」と呼びます。

サブルーチンで戻り値を使用するのに特別な処理は必要ありません。すべてのサブルーチンは必ず戻り値を返す処理を行います。今まではそれを呼び出し元で利用していませんでした。

サブルーチンからの戻り値を呼び出し元で使用するには次のように記述します。

変数 = &サブルーチン名;

サブルーチンの呼び出しを行ったあと、サブルーチンでの処理が終わり、処理がサブルーチンの呼び出しのところに戻ってきたときに、サブルーチンからの戻り値が変数に格納されます。

次にサブルーチンからどのようにして戻り値を返すのかについてです。サブルーチンでは最後に評価された結果を戻り値として返すことになっています。

次の例を見てください。

my $sum;

$sum = &calcSum(10, 23);
print "$sum";

sub calcSum{
  my ($num1, $num2) = @_;

  $num1 + $num2;
}

サブルーチンの最後で変数 $num1 と変数 $num2 を加算しています。加算した結果を他の変数に格納したり出力せずにただ加算だけしています。エラーではありませんが単に計算だけをしているのでサブルーチンの中では意味を持ちませんが、サブルーチンでは最後に行われた計算の結果が戻り値として設定されるためこの加算の結果がサブルーチンの戻り値となります。

今回の場合は、サブルーチンを呼び出すときに引数として 10 と 23 を指定しています。サブルーチンの最後で 2 つの引数を加算しています。この結果が戻り値として呼び出し元に戻り、変数 $sum に格納されます。

このように最後に計算が行われた場合は計算の結果が戻り値となります。単に数値や戻り値などの値が記述してあった場合はその値が戻り値となります。それ以外の処理の場合、処理に応じて評価された結果が戻り値となります。

return 文を使って戻り値を呼び出し元に返すこともできます。詳しくは「return文を使って呼び出し元に処理を返す」を参照されてください。

サンプルコード

それでは簡単なサンプルを作成します。

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 "10 + 23 = $sum\n";

$sum = &calcTwoNum(32, 14);
print "32 + 14 = $sum\n";

sub calcTwoNum{
  my ($num1, $num2) = @_;

  $num1 + $num2;
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

サブルーチンから戻り値を返す(1)

サブルーチンに 2 つの引数を渡し、サブルーチンから呼び出し元に演算した結果を戻り値として返しました。

-- --

Perl のプログラムでサブルーチンから戻り値を返す方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。