У меня есть несколько модулей Perl, установленных на моем хост-компьютере в ~/perl, как мне добавить их в путь к модулю Perl? Установка PERL5LIB или unshift, указывающая пути к @INC, безусловно, работает, но переменная среды не помогает при запуске в качестве сценария CGI, а способ @INC не очень переносим. Есть ли способ лучше? Это должна быть обычная проблема, я что-то упускаю?





Более чистый способ сделать это imo:
use lib "/path/" ;
есть и другие интересные и хорошие способы сделать это, которые можно найти здесь:
http://www.slideshare.net/pfig/cpan-training-presentation/
Кроме того, в сценариях re: CGI вы МОЖЕТЕ определить пути PERL5LIB для вашего CGI Env, это просто зависит от вашего веб-хоста.
Некоторые веб-хосты разрешают конкретный контроль переменных env для среды CGI, и вам нужно просто их установить, у других может быть список «разрешений», который позволяет переменным, видимым во время запуска, появляться в локальной области.
Может помочь узнать, как это сделать на вашем конкретном HTTP-сервере.
Есть еще один вариант, если настройка ENV вам не по вкусу: local :: lib
Которая автоматически ищет некоторые предопределенные пути.
PERL5LIB отлично работает со сценариями CGI. Вам просто нужно установить переменную в нужном месте, например, в конфигурации сервера. Какой веб-сервер вы используете? Для Apache я использую директиву SetEnv из mod_env.
@INC переносится. Пути, которые вы вводите, могут быть разными на всех машинах, но у вас не должно возникнуть проблем с самой переменной.
Вы читали FAQ в perlfaq8:
Спасибо, про директиву SetEnv не знал. Это именно то, что я искал.
Это работает не на всех настройках сервера - некоторые отключают SetEnv, а из того, что я читаю, другие позволяют устанавливать только переменные среды, начинающиеся с HTTP_. Думаю, какая-то мера безопасности.
+1 Замечу, что PERL5LIB игнорируется, если у вас включен режим taint ... perldoc.perl.org/perlsec.html#Taint-mode-and-%40INC