#perl #apache #configuration #cgi
#perl #apache #конфигурация #cgi
Вопрос:
Как я могу указать, где Perl ищет модули в файле Apache httpd.conf в OSX?
Я установил несколько модулей через CPAN, которые были успешно установлены в
/opt/local/lib/perl5/site_perl/5.8.9
Я могу проверить это через perldoc perllocal
Если я запускаю perl -V
в командной строке, я получаю (среди других каталогов):
@INC:
/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level
/opt/local/lib/perl5/site_perl/5.8.9
Однако, когда я запускаю сценарий perl как CGI через Apache, я получаю ошибки, из-за которых модули, которые я use
редактирую, не могут быть найдены. Список каталогов, включенных в @INC, не соответствует моей локальной конфигурации perl.
[error] [client 127.0.0.1] Can't locate Spreadsheet/ParseExcel.pm in @INC (
@INC contains:
/Library/Perl/Updates/5.8.8
/System/Library/Perl/5.8.8/darwin-thread-multi-2level
/System/Library/Perl/5.8.8
/Library/Perl/5.8.8/darwin-thread-multi-2level
/Library/Perl/5.8.8
/Library/Perl
/Network/Library/Perl/5.8.8/darwin-thread-multi-2level
...
Как устанавливается @INC при запуске perl как CGI в OSX — и как мне его переопределить?
Ответ №1:
Начальное значение @INC
жестко задается при perl
сборке, но его можно изменить несколькими способами. Наиболее удобными здесь являются
SetEnv PERL5LIB ...
из конфигурации Apache или с помощью
use lib qw( ... );
из скрипта Perl.
Тем не менее, небезопасно использовать модули, установленные с использованием Perl 5.8.9, с Perl 5.8.8 (хотя наоборот безопасно). Что еще хуже, один из них выглядит как многопоточный Perl, а другой — нет. Изменение @INC
просто не сработает.
Вам необходимо установить модуль, используя тот же perl
, который вы собираетесь использовать для запуска скрипта, или вы должны запустить скрипт, используя тот же perl
, который использовался для установки модуля.