Как у меня есть исходные файлы перезагрузки mod_perl на изменении?

То, что вы пытаетесь сделать здесь, не является «опасным» в том смысле, что, учитывая текущий интерфейс std::istream, кажется, что не существует каких-либо обстоятельств, при которых ссылка на rvalue здесь обязательно приведет к неопределенности. поведение при получении ссылки на lvalue не будет иметь. Но семантика всей этой хитроумной штуки ИМХО в лучшем случае очень сомнительна. Что означает для вызывающего кода «отдавать право собственности», но в то же время «не передавать его»? Кто «владеет» потоком после возвращения parse() !? Каким образом parse() делает поток «непригодным для использования»? Что если синтаксический анализ завершится неудачно из-за какой-то ошибки до того, как весь поток будет «потреблен»? Поток "непригоден" тогда !? Никто не может попробовать прочесть остальное? Является ли "право собственности" как-то "возвращено" вызывающему коду в этом случае?

Поток - это абстрактное понятие. Цель абстракции потока - служить интерфейсом, через который кто-то может потреблять ввод, не зная, откуда поступают данные, где они живут или как к ним получают доступ и как ими управлять. Если цель parse() состоит в том, чтобы проанализировать входные данные из произвольных источников, то это не должно касаться природы источника. Если это касается природы источника, то он должен запросить конкретный вид источника. И именно здесь, IMHO, ваш интерфейс противоречит сам себе. В настоящее время parse() использует произвольный источник. Интерфейс говорит: я беру любой поток, который вы мне даете, мне все равно, как он реализован. Пока это поток, я могу работать с ним. В то же время, он требует от вызывающей стороны отказаться от объекта, который фактически реализует поток. Интерфейс требует, чтобы вызывающая сторона передала что-то, что сам интерфейс не позволяет какой-либо реализации за интерфейсом когда-либо знать, получать к ней доступ или использовать любым способом. Например, как бы я прочитал parse() из std::ifstream? Кто потом закрывает файл? Если не может быть парсером. Это также не может быть я, потому что вызов парсера заставил меня передать объект. В то же время я знаю, что синтаксический анализатор даже не мог знать, что он должен был закрыть файл, который я передал…

В конце концов, он все равно будет работать правильно, потому что реализация способа не была реализована. Интерфейс действительно мог сделать то, что предполагал интерфейс, и мой деструктор std::ifstream просто запустит и закроет файл. Но что именно мы получили, лгая друг другу так ?! Вы обещали захватить объект, когда вы никогда не собирались, я обещал никогда не трогать объект снова, когда я знал, что мне всегда придется…

6
задан Frew Schmidt 14 January 2009 в 07:13
поделиться

1 ответ

Я думаю Apache2:: Перезагрузка несколько выполнит то, что Вы ищете. Однако не забудьте удалять всю эту реализацию, после того как Вы готовы ввести приложение в эксплуатацию.

Контролируйте все модули в %INC

Чтобы контролировать и перезагрузить все модули в %INC в начале обработки запроса, просто добавьте следующую конфигурацию к своему httpd.conf:

PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload

При работе с фильтрами соединения и модулями обработки протоколов Apache2:: Перезагрузка должна быть вызвана на этапе pre_connection:

PerlPreConnectionHandler Apache2::Reload

Модули регистра неявно

Чтобы только перезагрузить модули, которые зарегистрировались в Apache2:: Перезагрузите, добавьте следующее к httpd.conf:

PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload
PerlSetVar ReloadAll Off
# ReloadAll defaults to On

Затем любые модули со строкой:

use Apache2::Reload;

Будет перезагружен, когда они изменятся.

Поскольку для получения информации проверяют эту страницу документации.Надеюсь, это поможет.

9
ответ дан 9 December 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: