У меня есть скрипт, написанный на 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>
Я читал, что с помощью этого мне не нужно изменять мой код CGI Perl.(Я всегда использую строгую прагму, поэтому не беспокойтесь о неинициализированных глобальных переменных и подобных вещах).
Мой оригинальный скрипт по-прежнему работает, как задумано, за исключением одного, файлы, которые я включил в функцию 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.cgi script.perl включает в себя /
$ ls включает в себя /
functions.cgi functions.perl