Файл .pm, который загружается при каждом вызове интерпретатора Perl? - PullRequest
1 голос
/ 13 августа 2011

Мне показалось, что я где-то читал о том, где можно настроить perl для автоматической загрузки определенного .pm файла при запуске.

Я знаю о PERL5OPT, но, насколько я помню, это был конкретныйфайл, который будет загружен, если он существует.

Это опция компиляции, которую можно установить (например, через Configure)?

Ответы [ 2 ]

9 голосов
/ 13 августа 2011

Читая через perldoc perlrun, похоже, что вы ищете то, о чем говорится в опции -f:

-f

Отключить выполнение $ Config {sitelib} /sitecustomize.pl при запуске.

Perl можно построить так, чтобы он по умолчанию пытался выполнить $ Config {sitelib} /sitecustomize.pl при запуске (в блоке BEGIN). это это ловушка, которая позволяет системному администратору настраивать поведение Perl. Это например, может использоваться для добавления записей в массив @INC, чтобы сделать Perl найти модули в нестандартных местах.

Perl фактически вставляет следующий код:

BEGIN {
do { local $!; -f "$Config{sitelib}/sitecustomize.pl"; }
&& do "$Config{sitelib}/sitecustomize.pl";
}

Поскольку это фактическое действие (не обязательное), sitecustomize.pl этого не делает нужно вернуть истинное значение. Код запускается в основном пакете, в его собственная лексическая сфера. Однако, если сценарий умрет, $ @ не будет установлен.

Значение $ Config {sitelib} также определяется в коде C, а не читать из Config.pm, который не загружен.

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

Чтобы определить во время выполнения, была ли эта возможность скомпилирована в вашем perl, вы можете проверить значение $ Config {Использованияcustomize}.

Я никогда не делал этого, но похоже, что если вы введете то, что хотите, в $Config{sitelib}/sitecustomize.pl вы получите то, что ищете.

См:

0 голосов
/ 13 августа 2011

Я смущен тем, что вы подразумеваете под "при запуске".Если вы имеете в виду, когда скрипт / CGI / что-то «запускается», то просто используйте модуль в скрипте:

use Data :: Dumper;

Или вы имеете в виду что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...