Library.

●ライブラリ(1998/10/12)

前のお題だったアクセス・カウンタでもそうなのですが、手を加えるであろう部分というのは大抵決まり切っているんですよね。まずはcgiプログラムがアクセスするファイル名。アクセス・カウンタの場合ですとカウント値を記録するファイル名、HTMLファイル名といったところでしょうか。カウント値を記録するファイルはダウンロード・カウンタでも使っていますね。で、こういった他の部分に比べて変更する頻度が高いと思われる部分を別ファイルにしておけます。ダウンロード・カウンタの場合はあまり意味がないのですが、前回のアクセス・カウンタの場合は好きに弄れる設定項目が割りとあるので、その設定部分を別ファイルに切り出しておくと良いかもしれません。まずは前のアクセス・カウンタでの設定項目を挙げてみます。

カウンタ・ファイル名
HTMLファイル名
カウンタ置き換え用コメントタグ
カウンタ表示桁数
数字イメージ寸法

こんな所でしょうか。何れもそれ用の変数に代入しています。その部分だけを集めると以下のようになります。

$count_filename = './count.txt';    # カウンタファイル名
$html_filename = './top.html';      # HTMLファイル名
$counter_comment = '<!--counter-->'; # カウンタ置き換え用コメントタグ
$entire = 6;                       # 桁数
$width = 15;                       #
$height = 20;                      # 高さ

これをcgiプログラムとは別のファイルにしておいて、例えばファイル名をcustomize.pl等としておけば知識のない人にcgiプログラムを渡したときに余計な部分を弄られて動作しなくなるという危険が減るかもしれません。因みに.plという拡張子ですが、別に何でも構いません。perlのファイルなのでそれを略してplとすることがよくあるというだけです。好きなようにファイル名は付けてもらって構いません。とりあえずcgiプログラムから上記部分をcustomize.plというファイルに全て移して、cgiプログラムからは上記の部分を削除します。さて、cgiプログラムからcustomize.plに移したモノをcgiプログラムから利用するには以下のようにします。

require 'customize.pl';

この1行を加えると、customize.plの内容をcgiプログラムの一部であるかのようにすることが出来ます。C/C++をご存じの方はインクルード・ファイル、ヘッダ・ファイルと言えば通りがよいかもしれません。requireの行があると指定されたファイルをcgiプログラム中に取り込んでくれます。

customize.pl

$count_filename = './count.txt';    # カウンタファイル名
$html_filename = './top.html';      # HTMLファイル名
$counter_comment = '<!--counter-->'; # カウンタ置き換え用コメントタグ
$entire = 6;                        # 桁数
$width = 15;                        #
$height = 20;                       # 高さ
1;

counter.cgi

#! /usr/local/bin/perl

require './customize.pl'; # このcgiプログラムにcustomize.plを取り込む

以下略

各ファイルはこんな感じにしておきます。ただしちょっと注意事項があります。customize.plの最後の行に注目して下さい。唐突に1という数字だけの行があります。実はこの行がないとcgiプログラムの実行に失敗してしまう可能性があります。厳密に言うとこのcustomize.plの内容であればこの1という行は不要なのですが、説明のために付けています。requireによってファイルを取り込むと、その取り込んだファイル内の一番最後の数値計算結果をチェックして、その結果が0だとプログラムの実行を中断してしまうというperlの言語仕様があるのです。一番最後にいきなり1という数字が現れているのは、この1を最後の数値計算結果とするためです。今回の場合は変数$height20を代入しているのでこれが最後の数値計算結果として有効なので1だけの行は不要なのですが、場合によってはこの変数に0を代入するなんていうこともあるかもしれません。0を代入してしまうと、この0が最後の数値計算結果となってしまうので必ずperlで書いたプログラムの実行が中断されることになってしまいます。従って、requireで取り込むファイルの最後には無条件で1という行を入れておく方が無難です。

requireで取り込むファイルの中身は通常のperlプログラムと何ら変わりません。今回の例では変数への代入部分だけですが、必要ならperlで書いたプログラムそのものであっても一向に構いません。実際に、日本語の文字コードの変換を行うプログラムを収めたjcode.plというモノがあり、かなりあちこちで使われていて有名です。このjcode.plの中身はperlで書かれたプログラムとなっています。このように、ある機能を持ったプログラムを単独の別ファイルとして切り出しておき別のプログラムから取り込んで使えるようになっているモノをライブラリ(library)と呼んでいます。


戻る