Почему моя переменная раздела <Perl>иногда доступна только в mod_perl? - PullRequest
1 голос
/ 12 февраля 2009

В httpd.conf у меня есть:

<Perl>
   $MyPackage::foo = { ... };
</Perl>

Согласно документации, это должно, поскольку оно квалифицировано, сохраняться в моих perl-скриптах, которые запускаются с обработчиком modperl. И иногда они делают. Но тогда все, что мне нужно сделать, это прикоснуться к MyPackage.pm, и внезапно $ MyPackage :: foo теперь является undef. Перезапустите веб-сервер, и он снова заработает.

У кого-нибудь есть конец моим слезам?

Мое лучшее предположение заключается в том, что блок запускается только один раз, когда файл .conf анализируется, а затем новый поток получает перезагруженный файл. Но почему он не запускается один раз за поток? Есть ли что-то, что я могу использовать, кроме $ ENV и пользовательских директив, которые загружаются ровно один раз на сервер, а затем копируются во все интерпретаторы? (Возможно, в конце я использую неправильную терминологию, но вы поняли.)

1 Ответ

0 голосов
/ 12 февраля 2009

Я понял это во время набора текста, но подумал, что поделюсь, если это спасет кого-либо еще от волос, которые я только что вырвал.

Самое простое решение - переименовать переменную области действия в .conf в то, что вы на самом деле не используете:

<Perl>
    $MyPackageConfig::foo = { ... };
</Perl>

... и тогда ваш фактический пакет заберет его:

package MyPackage;
our $foo = $MyPackageConfig::foo;

Кажется, это работало последовательно, когда я тестировал его.

...