Какой канонический способ сделать каталог с текущим исходным файлом для поиска с помощью операторов `use` и` require` в Perl в mod_perl? - PullRequest
2 голосов
/ 18 июля 2011

Я пытался

BEGIN {
    unshift @INC, 'current_path_string';
}

Но он работает только для use, когда require, он не ищется.

Есть ли обходной путь?

Ответы [ 3 ]

4 голосов
/ 18 июля 2011

При запуске под mod_perl, после запуска сервера @INC заморожен и не может быть обновлен.Единственная возможность временно изменить @INC - это когда скрипт или модуль загружаются и компилируются в первый раз.После этого его значение сбрасывается на исходное.Единственный способ изменить @INC навсегда - это изменить его при запуске Apache.

Два способа изменить @INC при запуске сервера:

  • В файле конфигурации,Например, PerlSetEnv PERL5LIB /home/httpd/perl

  • В файле запуска непосредственно измените @INC и загрузите файл запуска из файла конфигурации.

См. также @ INC и mod_perl

0 голосов
/ 02 июня 2012

Да, вы можете обновить @INC в скрипте запуска. Но использование кода ниже в вашем модуле будет просто работать:

use lib '/app/my-libs';

как минимум - для моего CGI-приложения, работающего под mod_perl.

0 голосов
/ 18 июля 2011
use Foo;

совпадает с

BEGIN {
    require Foo;
    import Foo;
}

, поэтому, если он работает для use, он работает для require.

...