私はperlで書かれ、CGIとして実行されるスクリプトを持っています。正常に動作します。最近、mod_perlモジュールをapacheにインストールし、PerlModule ModPerl::Registryディレクティブを使用しました。
PerlModule ModPerl::Registry
PerlModule CGI
PerlSendHeader On
Alias /perl/ /real/path/to/perl/scripts/
<Location /perl>
SetHandler perl-script
PerlHandler ModPerl::Registry
Options ExecCGI
</Location>
<Files *.perl>
SetHandler perl-script
PerlHandler ModPerl::Registry
Options ExecCGI
</Files>
これを使用して、cgiperlコードを変更する必要がないことを読みました。(私は常に厳密なプラグマを使用しているので、初期化されていないグローバル変数などについて心配する必要はありません)。
元のスクリプトは意図したとおりに機能しますが、require()関数に含めたファイルは解決できなくなります。
script.cgi:
#!/usr/bin/perl -w
use strict;
use CGI qw(:standard Vars);
require "includes/functions.cgi";
#blah blah, more stuff
script.perl
#!/usr/bin/perl -w
use strict;
use CGI qw(:standard Vars);
require "includes/functions.perl"; # <---- Returns error: Can't locate includes/functions.perl in @INC
#blah blah, more stuff
ディレクトリ構造は次のように機能します。
$ ls
script.cgiscript.perlには/が含まれます
$lsには/が含まれます
関数.cgifunctions.perl