ライブラリ

ライブラリ

ライブラリについて

ライブラリを利用すれば、ユーザー定義関数をまとめておくことができます。よく使うユーザー定義関数をライブラリとして作成しておけば、CGIプログラムから呼び出すだけで自作関数を使用することができるようになります。HTMLページを作成する際、特定のファイルにまとめたCSSやJavaScriptを読み込んで使いまわす事が多いですが、それと同じことができます。

それでは実際にライブラリを作ってみます。math.pl を作成し、以下の内容を記述してみてください。

#合計を求める関数
sub summation {
  $number = @_[0] + @_[1];
  return $number;
}

#平均値を求める関数
sub average {
  $number = (@_[0] + @_[1]) / 2;
  return $number;
}

1;

引数を2つ与えると、その合計を求める関数と平均値を求める関数をそれぞれ定義しています。また、ライブラリの最後には必ず 1; と書く決まりになっています。忘れるとエラーになるので注意してください。

次に、以下のプログラムを作成します。

#!/usr/local/bin/perl

require 'math.pl';

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";

#合計を求める
$summation = &summation(3, 7);

#平均値を求める
$average = &average(3, 7);

print "<p>合計は$summation、平均値は$averageです。</p>\n";
print "</body>\n";
print "</html>\n";

exit;

これを実行すると、ブラウザに 合計は10、平均値は5です。 と表示されます。
以下で、このプログラムの内容を解説します。

今回作成したライブラリは math.pl です。「計算するための関数を集めたライブラリ」ということでmath というファイル名にしましたが、実際は何でも大丈夫です。また、ライブラリの拡張子は通常 pl にします。(Perl Library の略だと思います。)

ライブラリを読み込むには、require 関数を使用します。上のように require 'math.pl'; と記述すると、math.pl を読み込むことができます。これにより、math.pl の中に書いた命令が使用できるようになります。なお、ライブラリが異なるフォルダの中にある場合、require '../library/math.pl'; のようにパスを指定すれば読み込むことができます。

パッケージについて

ライブラリをたくさん作っていると、ライブラリ内部の関数名が他のライブラリ内の関数名と重複することがあります。

重複しないように注意しながら作成してもいいのですが、パッケージを定義する事により、重複を気にせず作成できるようになります。それでは、先ほどの math.pl を、パッケージを利用した記述に変更してみます。

package math;

#合計を求める関数
sub summation {
  $number = @_[0] + @_[1];
  return $number;
}

#平均値を求める関数
sub average {
  $number = (@_[0] + @_[1]) / 2;
  return $number;
}

1;

ファイルのはじめに package math; を追加しています。これで math というパッケージ名を付けることができます。このパッケージ内の関数を使用するプログラムは、以下のようになります。

#!/usr/local/bin/perl

require 'math.pl';

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";

#合計を求める
$summation = &math::summation(3, 7);

#平均値を求める
$average = &math::average(3, 7);

print "<p>合計は$summation、平均値は$averageです。</p>\n";
print "</body>\n";
print "</html>\n";

exit;

&math::summation() と書くことにより、「パッケージ math の中にある summation を使用する」という意味になります。

このように、パッケージ名と関数名を :: で区切って指定します。パッケージ名を指定して関数を使用するので、同じ名前の関数が複数あっても区別する事ができます。