サブルーチンを定義する

サブルーチンを利用するにはサブルーチンを定義する必要があります。サブルーチンの名前を指定し、呼び出されたときに実行する処理を記述していきます。ここでは Perl のプログラムでサブルーチンを定義する方法について解説します。

(Last modified: )

サブルーチンを定義する

サブルーチンを定義するには次のように行います。

sub サブルーチン名{
  実行する処理;
}

サブルーチンは sub のあとに空白を 1 文字空けてからサブルーチン名を記述します。そしてサブルーチンで実行する処理を { から } で囲まれたブロック中に記述して行きます。実行する処理は複数記述することができます。

サブルーチン名として記述する名前は変数と同じくアルファベット、数字、アンダーバー("_")が使用できます。ただし先頭に数字は使用できません。

サブルーチン内には実行する処理を記述していきます。必須ではありませんが、各行の先頭はインデント(字下げ)してどこからどこまでがブロック内の処理なのか視覚的に分かるように記述します。

サブルーチンを定義する位置

サブルーチンはプログラム中のどこで定義しても構いません。一般的にはプログラム内の先頭や最後にまとめて定義します。

print "サブルーチンのテスト\n";

sub hello{
  print "hello\n";
}

sub bye{
  print "bye\n";
}

定義したサブルーチンはプログラムの中から呼び出されますが、サブルーチンを記述する位置は呼び出す処理が記述されている位置よりも前であっても後であっても構いません。

下記では 2 つのサブルーチンを定義し、プログラムの中でそれぞれ呼び出しています。

print "サブルーチンのテスト\n";

sub hello{
  print "hello\n";
}

&hello;
&bye;

sub bye{
  print "bye\n";
}

サブルーチンは呼び出されるよりも前に定義されていてもあとに定義されていても問題ありません。

※ サブルーチンの呼び出し方については「サブルーチンを呼び出す」を参照されてください。

サブルーチンはいつ実行されるか

Perl のプログラムは記述した順に上から下へ順に実行されていきますが、サブルーチン内に記述された処理はプログラム内からサブルーチンを呼び出さない限り実行されません。

例えば次のようなプログラムで考えてみます。

sub hello{
  print "hello\n";
}

print "サブルーチンのテスト\n";

sub bye{
  print "bye\n";
}

print "終了\n";

このプログラムではまずサブルーチンが定義されていますが、サブルーチンのブロック内で記述された処理はサブルーチンが呼び出されるまで実行されません。その為、 print "サブルーチンのテスト\n"; がまず実行され、その次に print "終了\n"; が実行されてプログラムは終了します。

このようにサブルーチン内の処理はサブルーチンが呼び出されない限り実行されません。(ただし先ほど記述した通り、サブルーチンは最初か最後にまとめておいた方が分かりやすいプログラムになります)。

サンプルコード

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

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

sub hello{
  print "hello\n";
}

print "サブルーチンのテスト\n";

sub bye{
  print "bye\n";
}

print "終了\n";

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

perl sample.pl

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

サブルーチンを定義する(1)

2 つのサブルーチンを定義しました。サブルーチンは定義しただけでは実行されることはないため、プログラムのどこに記述されていたとしてもサブルーチンが呼び出されるまではブロック内の処理は実行されません。

-- --

Perl のプログラムでサブルーチンを定義する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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