5.5.4. カスタムモジュール
あなたのサイトに固有のPerlモジュールを作成することをお勧めします。 異なるサイトをホストしている場合、またはサイト内に異なるアプリケーションがあり、外観や感触が異なる場合は、それぞれのモジュールを作成するこ このモジュールの中には、多くのCGIスクリプトで使用しているサブルーチンを配置することができます。これらのサブルーチンはサイトによって異なりますが、一つはエラーを処理する必要があります。
以前に独自のPerlモジュールを作成したことがない場合は、心配しないでください、それは非常に簡単です。 例5-3にavery最小モジュールを示します。
例5-3. CGIBook::Error.pm
#!/usr/bin/perl -wTpackage CGIBook::Error;# Export the error subroutineuse Exporter;@ISA = "Exporter";@EXPORT = qw( error );$VERSION = "0.01";use strict;use CGI;use CGI::Carp qw( fatalsToBrowser );BEGIN { sub carp_error { my $error_message = shift; my $q = new CGI; my $discard_this = $q->header( "text/html" ); error( $q, $error_message ); } CGI::Carp::set_message( \&carp_error );}sub error { my( $q, $error_message ) = @_; print $q->header( "text/html" ), $q->start_html( "Error" ), $q->h1( "Error" ), $q->p( "Sorry, the following error has occurred: " ), $q->p( $q->i( $error_message ) ), $q->end_html; exit;}1;
Perlモジュールと標準のPerlスクリプトの唯一の違いは、ファイルを保存する必要があることですa.pm 拡張子は、モジュールのパッケージの名前をthepackagefunctionで宣言します(これは、ファイルの名前と一致する必要がありますが、ファイルの名前と一致する必要がありthe.pm 拡張と代入::for/)、そして評価されたときに真の値を返すことを確認してください(the1;の理由;一番下にあります)。
パッケージ名を決定する場合、ファイル名は@INCのライブラリパスに依存する必要があります。 Ourexampleでは、ファイルを/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pmに保存します。/usr/lib/perl5/site_perl/5.005はlibrarydirectoryです。 したがって、librarydirectoryに対するモジュールの相対パスはCGIBook/Error.pmなので、パッケージはisCGIBook::Errorです。
モジュールのバージョンを$VERSIONに格納するのが標準的な方法です。 便利のために、私達はまたexporttheの間違いのサブルーチンに輸出業者モジュールを使用します。 これにより、スクリプト内でcgibook::Exporter::errorの代わりにerrorinsteadとして参照することができます。 UsingExporterの詳細については、Exporter manpageまたはPerlのプログラミングなどの主要なPerlテキストを参照してください。
このファイルを保存するためのいくつかのオプションがあります。 最も簡単な解決策は、/usr/lib/perl5/site_perl/5.005/CGIBook/Error.pmなどのPerlライブラリのsite_perlディレクトリ内に保存することです。site_perlディレクトリには、サイト固有のモジュールが含まれています(つまり、Perlのstandarddistributionには含まれていません)。 Perlライブラリのパスは異なる場合があります; 次のコマンドを使用して、システム上でそれらを配置することができます:
$ perl -e 'print map "$_\n", @INC'
あなたはおそらく、あなたが作成したすべてのPerlモジュールを保持するために、CGIBookで行ったように、yourorganizationに固有のサブディレクトリを作成したいと思います。
次のようにモジュールを使用できます:
#!/usr/bin/perl -wTuse strict;use CGI;use CGIBook::Error;my $q = new CGI;unless ( check_something_important( ) ) { error( $q, "Something bad happened." );}
モジュールをPerllibraryディレクトリにインストールする権限がなく、システム管理者にそれを実行させることができない場合は、モジュールを別の場所、例えば/usr/local/apache/perl-lib/CGIBook/Error.pmに配置することができます。次に、perlがモジュールを検索するリストにこのディレクトリを含めることを覚えておく必要があります。 これを行う最も簡単な方法は、thelibプラグマを使用します:
#!/usr/bin/perl -wTuse strict;use lib "/usr/local/apache/perl-lib";use CGI;use CGIBook::Error;...