return文を使って呼び出し元に処理を返す

サブルーチンではブロックの最後まで処理が進むと呼び出し元に処理が返りますが、サブルーチン内の任意の位置で return 文を実行するとサブルーチンの呼び出し元に処理を返すことができます。ここでは Perl で return 文を使って呼び出し元に処理を返す方法について解説します。

(Last modified: )

return文の使い方

サブルーチンのブロック内で return 文を実行すると、ブロックの途中であってもサブルーチンの呼び出し元に処理を返すことができます。

return;

return 文が実行されてサブルーチンが終了した場合、戻り値として空の値が返されます。空の値とは呼び出し元が値を求めている場合は未定義値 undef となり、リストを求めている場合は空のリストとなります。

また return 文が実行される時に戻り値を指定することもできます。この場合の書式は次のようになります。

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 文は記述する必要はありませんが、戻り値が何であるかを明確にできます。

サンプルコード

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

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 "国語:72、 数学:84\n";
print "$msg\n";

$msg = &hantei(92, 80);
print "国語:92、 数学:80\n";
print "$msg\n";

$msg = &hantei(87, 58);
print "国語:87、 数学:58\n";
print "$msg\n";

sub hantei{
  my ($kokugo, $suugaku) = @_;

  if ($kokugo < 75){
    return "国語が不合格";
  }

  if ($suugaku < 75){
    return "数学が不合格";
  }

  return "合格";
}

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

perl sample.pl

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

return文を使って呼び出し元に処理を返す(1)

サブルーチンのブロックの中で return 文を使って処理を返しています。

-- --

Perl で return 文を使って呼び出し元に処理を返す方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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