サブルーチン

サブルーチンとは、「何度も使用される処理を1箇所にまとめ、使用するときは常にそこから呼び出す!」という機能をいいます。これは一度記述すれば何度でも使えるので、覚えればとても楽できる機能です。是非覚えて下さい。

※サブルーチンを使ってみよう!

同じファイルサブルーチンを利用する方法

例えば、「print "Contet-type:text/html\n\n";」という記述がPerl文中でしばしば見かけられます。これはご承知の通りhtmlを出力する際、先頭に記述しなければならない文字列でしたね。
しかし、Perlプログラムは常にhtmlへ出力するので、この記述が何度も何度も面倒です。そこでサブルーチンの出番です。まずはサブルーチン(呼ばれる方)の記述方法をご覧下さい。

サブルーチンの記述方法
sub サブルーチン名前 {

print "Contet-type:text/html\n\n";

}
この「sub」の後に半角スペースを入れ、次にお好きな名前を記述して下さい。

サブルーチンの呼び出し方法

&サブルーチン名(引数) ※これだけで呼び出す事が出来ます。

Perlプログラムをご覧になった事のある方は、「sub ○○○○」というのを一度は見た記憶があるはずです。「sub ○○○○」の後に「{ 」と「 }」で囲まれている部分が「使い回しされる文字列」です。記述する場所はお好きなところでOKです。(通常は最下部にサブルーチンが集められます)これらは同じファイルに記述されている場合の利用方法です。

次は、別のファイルにサブルーチンファイルを作り、そこから呼び出す方法をお伝えします。

別のファイルからサブルーチンを利用する方法

上記の方法より別ファイルに記述したこちらの方が便利ですね。理由は「他のプログラムとサブルーチンを共有できる!」からです。

ライブラリの呼び出し方
require 'ライブラリファイル名';
※サブルーチンをまとめておく別ファイルは、「ある書式にのっとって記述しなければならない!」のです。といっても、最後(末尾)が「exit;」ではなく「1;」になるというだけです。また、ファイルの拡張子も「.pl」となります。この書式にのっとって書かれた別ファイルを「ライブラリ」と呼びます。ライブラリを呼び出すには上記の「require関数」を使用します。
毎度お馴染みの「require 'cgi-lib.pl';」という文字列は、ファイル名のライブラリ(cgi-lib.pl)を呼び出していたのです。「jcode.pl」などもこのようにして呼び出されます。
ライブラリの記述例(sub.pl)
sub header {  #呼び出されるサブルーチン名(&header)
print "Contet-type:text/html\n\n";  #htmlを出力するおまじない
print <<EOF;  #ヒアドキュメント開始
<html>
<head>
<title>サブルーチン</title>
</head>
<body>
EOF  #ヒアドキュメント終了
}
sub footer {  #呼び出されるサブルーチン名(&footer)
print "</body></html>";
}
1;  #ここを「exit;」と記述するとエラーになります。
呼び出す側の記述例(yobi_dasi.cgi)
#!C:/Perl/bin/perl  #perlのパスを記述する
requeir 'sub.pl';  #同じディレクトリ内の「sub.pl」を呼び出している。
&header();  #「sub.pl」内のサブルーチン(sub header)を呼び出している。
print <<EOF;
<font size="4">
ブラウザソフトにこの文章が表示されます。<br>
しかし、htmlタグのヘッダ部分とフッダ部分は<br>
サブルーチンとして呼び出されているのでここには書かれません。
</font>
EOF
&footer();  #「sub.pl」内のサブルーチン(sub footer)を呼び出している。
exit;
■ブラウザの表示結果
ブラウザソフトにこの文章が表示されます。
しかし、htmlタグのヘッダ部分とフッダ部分は
サブルーチンとして呼び出されているのでここには書かれません。

サブルーチンに引数を渡す

今までのサブルーチンはhtmlを出力する時に便利ですが、幾つかの問題点があります。それはサブルーチン「header」で指定しているタイトルです。「<title>」で指定しているのですが、ここでは「サブルーチン」と指定していますので、サブルーチン「header」を使用すると、必ず「サブルーチン」と表示されてしまいます。「これは困ります〜」という方の為に、解決方法をお伝えします。

まず、引数を渡してタイトルを指定できるようにしましょう。サブルーチンを呼び出す時に引数を指定すると、その引数は特殊変数「@_」の要素として自動的に登録されます。サブルーチンの中でその引数を使う時は配列「@_」の要素として指定します。

引数を渡す

サブルーチンの記述方法
&header ( "タイトル" );  #注意:ダブルクォートで囲む
※上記のように記述すると、引数は「タイトル」になります。
&header ( "タイトル" );  #注意:ダブルクォートで囲む
sub header {
print $_[0];
}
これを実行するとサブルーチンを呼び出す時に指定した引数が「$_[0]」に入りますので、「タイトル」と出力されることになります。また、複数の引数を指定する事もできます。
&header ( "タイトル1","タイトル2" );  #注意:ダブルクォートで囲む
※配列「@_」の要素の0番目が「タイトル」、1番目が「タイトル2」になります。左から順番に登録されます。