return文
サブルーチンではブロックの最後まで処理が進むと呼び出し元に返りますが、任意の位置で即座に呼び出し元に処理を返すことが出来ます。「return」文を使います。
return;
「return」文が実行されると呼び出し元に処理が戻ります。「return」文でサブルーチンが終了した場合には、戻り値として空の値が設定されます。空の値とは呼び出し元が値を求めている場合は未定義値「undef」となりリストを求めている場合は空のリストとなります。
また「return」文が実行される時に戻り値を指定することも可能です。この場合の書式は次のようになります。
return 戻り値;
この場合、呼び出し元に処理が戻ると共に戻り値が指定した値に設定されます。
例えば次のように使用します。
my $msg; $msg = &hantei(72, 84); print "$msg"; sub hantei{ my ($kokugo, $suugaku) = @_; if ($kokugo < 75){ return "不合格"; } if ($suugaku < 75){ return "不合格"; } "合格"; }
今回の場合は呼び出し元から2つの教科の成績が引数として渡されてきます。成績を順に判定し、不合格の場合は「return」文を使いその時点でサブルーチンを終了し呼び出し元に値を返します。2つの教科の判定が問題無かった場合は最後に戻り値を設定してサブルーチンが終了します。
return文の使い方
return文はサブルーチンの途中で呼び出し元に処理を戻す場合に使用されるものですが、戻り値を明確に記述することが出来るためサブルーチンの最後でも意識的に使用する場合もあります。
例えば先ほどのサンプルの最後の部分を書き換えてみます。
my $msg; $msg = &hantei(72, 84); print "$msg"; sub hantei{ my ($kokugo, $suugaku) = @_; if ($kokugo < 75){ return "不合格"; } if ($suugaku < 75){ return "不合格"; } return "合格"; }
サブルーチンの最後の「return」は記述する必要はありませんが、戻り値が何であるかを明確に出来ます。これはどちらでも構いませんが個人的には「return」を付けるのが好みです。出来る限り必要無い記述は省略するという考え方もあるようです。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my $msg; $msg = &hantei(72, 84); print "$msg¥n"; $msg = &hantei(92, 80); print "$msg¥n"; sub hantei{ my ($kokugo, $suugaku) = @_; if ($kokugo < 75){ return "不合格"; } if ($suugaku < 75){ return "不合格"; } return "合格"; }
上記を「test7-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )