サブルーチンとは

プログラムの中で同じ処理を行うことが何回かある場合、その都度同じ処理を記述していくかわりにサブルーチンとして定義することで何回も記述する必要がなくなります。ここでは Perl のプログラムの中でサブルーチンがどのようなものかについて解説します。

(Last modified: )

サブルーチンとは

サブルーチンの具体的な使い方を見ていく前に、サブルーチンがどういったもので、利用するとどのように便利なのかなどについて簡単に解説します。

次の例を見てください。配列に含まれる要素をすべて出力した後で、 reverse 関数を使って要素を逆順に並び替えて改めて画面に出力しています。

my @city = ("東京", "大阪", "名古屋");

print "配列の要素を出力します\n";
foreach my $var(@city){
  print "$var\n";
}

my @rcity = reverse(@city);
print "配列の要素を出力します\n";
foreach my $var(@rcity){
  print "$var\n";
}

配列の要素を順に取り出して出力する部分を 2 回記述しています。今回のように 2 回であればそのまま記述しても構いませんが、プログラム中で何回も同じ処理を記述するのはプログラムが冗長になり可読性も悪くなっていきます。

そこで同じような一連の処理を何度も行う場合には、その部分をサブルーチンとして独立し、必要に応じて呼び出すことができます。詳しいサブルーチンの使用方法は次のページ以降で解説しますけれどサブルーチンを使って先ほどのサンプルを書き直すと次のように記述できます。

my @city = ("東京", "大阪", "名古屋");
&dispArrayValue(@city);   # サブルーチン呼び出し

my @rcity = reverse(@city);
&dispArrayValue(@rcity);   # サブルーチン呼び出し

# ここから下がサブルーチンです
sub dispArrayValue{
  my @array = @_;

  print "配列の要素を出力します\n";
  foreach my $var(@array){
    print "$var\n";
  }
}

配列の要素を出力する部分をサブルーチン名 dispArrayValue と言う名前でサブルーチンとして記述し、必要に応じて呼び出しています。最初のサンプルよりもむしろ長くなった気がしますが、さらに配列の中身を確認する必要ができた場合でもサブルーチンを呼び出す 1 行だけを追加するだけで済みます。

my @city = ("東京", "大阪", "名古屋");
&dispArrayValue(@city);

my @rcity = reverse(@city);
&dispArrayValue(@rcity);

my @rrcity = reverse(@rcity);
&dispArrayValue(@rrcity);

sub dispArrayValue{
  my @array = @_;

  print "配列の要素を出力します\n";
  foreach my $var(@array){
    print "$var\n";
  }
}

このようにサブルーチンは同じような一覧の処理をまとめるために使用します。詳しくは次のページ以降で解説していきます。

サンプルコード

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

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my @city = ("東京", "大阪", "名古屋");
&dispArrayValue(@city);

print "----\n";

my @rcity = reverse(@city);
&dispArrayValue(@rcity);

sub dispArrayValue{
  my @array = @_;

  print "配列の要素を出力します\n";
  foreach my $var(@array){
    print "$var\n";
  }
}

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

perl sample.pl

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

サブルーチンとは(1)

配列をサブルーチンへ渡して要素を順に出力したあと、要素の順序を逆にした配列を作成して再度同じサブルーチンへ渡して要素を順に出力しました。

-- --

Perl のプログラムの中でサブルーチンがどのようなものかについて解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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