Как переопределить настройки @INC в httpd.conf в OSX - PullRequest
2 голосов
/ 11 октября 2011

Как установить, где 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, однако, я получаю сообщения об ошибках, которые не могут быть найдены.Список директорий, включаемых в @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 Ответ

6 голосов
/ 11 октября 2011

Начальное значение @INC жестко задано при построении perl, но его можно изменить несколькими способами.Наиболее удобными здесь являются

SetEnv PERL5LIB ...

из конфигурации Apache или использование

use lib qw( ... );

из скрипта Perl.

При этом не безопасноиспользуйте модули, установленные с использованием Perl 5.8.9 и Perl 5.8.8 (хотя, наоборот, это безопасно).Хуже того, один выглядит как Perl, а другой нет.Модификация @INC просто не будет работать.

Вам необходимо установить модуль, используя тот же perl, который вы собираетесь использовать для запуска скрипта, или вы должны запустить скрипт, используя тот жеperl как тот, который использовался для установки модуля.

...