2010-06-28 3 views
3

У меня есть сценарий, написанный на Perl и выполненный как CGI. Он работает нормально. Недавно я установил модуль mod_perl в apache и использовал директиву PerlModule ModPerl :: Registry.mod_perl обрабатывает пути включения иначе, чем cgi?

Я читал, что, используя это, мне не нужно изменять свой код 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

+0

Похоже, что 'включает/функции .perl' правильно расположен, но не может быть найдена другая зависимость 'body.html.cgi'. Должен ли этот файл также переименован из '.cgi' в' .perl', как вы, кажется, сделали? Не удалось ли скопировать его в каталог скрипта mod_perl? – pilcrow

+0

Извините, я написал неправильное сообщение об ошибке. Сообщение об ошибке, которое оно вернуло, было «Невозможно найти include/functions.perl в @INC», body.html.cgi - это что-то еще, не связанное с этим. –

ответ

2

От: http://perl.apache.org/docs/2.0/api/ModPerl/Registry.html

META: документ, который на данный момент мы не Chdir() в директории скрипта, так как она влияет на весь процесс под потоками. ModPerl :: RegistryPrefork должен использоваться теми, кто работает только под предпрофессиональным MPM.

поэтому, если вы используете MPM Apache2, вы должны попробовать использовать ModPerl :: RegistryPrefork. Если вы используете рабочий или событие или окна, вам придется изменить свою программу, чтобы не предполагать, что cwd - это каталог, в котором находится perl.

+0

Хорошо спасибо! В этом есть смысл. –