Как переопределить настройки @INC в httpd.conf на OSX

#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 , который использовался для установки модуля.