Перезапускает ли Perl модули Perl, если они меняются?

Если бы я написал что-то в plperlu, и он использовал модуль Perl (например, MyModule::Foo), когда этот модуль был бы перезагружен? Отслеживает ли он их как Apache2::Reload mod_perl, так что касание вызовет реинтерпретацию?

1 ответ

Решение

После некоторого тестирования, основанного на том, что прокомментировал Леон, очевидно, что MyModule::Foo остается в памяти с первого раза, когда он успешно используется, но только в рамках текущего процесса (т. Е. Дескриптор базы данных).

Если при компиляции возникли ошибки (возникнет жалоба, когда вы определили функцию, использующую ее), или при ее использовании (например, при выборе из функции), он перезагрузится. Тем не менее, я не вижу способа заставить его перезагрузиться внутри процесса после его успешного выполнения, даже вызвав другой модуль в модуле, который выдает ошибку.

Кроме того, если вы обращаетесь к PostgreSQL через Apache::DBI, это означает, что ваши кэшированные дескрипторы не будут воспринимать изменения модуля, если вы не отключите все кэшированные дескрипторы.

Так что я думаю, что нет способа принудительно выполнить проверку внутри процесса, как в Apache2::Reload...

Другие вопросы по тегам