![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
DaemonSuw |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 11.3.2008 Репутация: 3 Всего: 3 |
Доброе время суток.
Столкнулся со следующей проблемой - Как перекомпилировать модуль на этапе исполнения интерпретатором... то есть удалить его из памяти и заново загрузить... Нужно для тестирования модулей, что бы не приходилось перезагружать/перекомпилировать всю прогу, то есть еще кучу модулей... Нужна компиляция на лету)... Что стоит: ActiveState 5.10, WinXP ![]() Что делал: 1. no <модуль> - не помогло require <модуль> 2. delete $INC{'<модуль>'}; require <модуль> - тоже не помогло, то есть если посмотреть дампером перед delete модуль есть, после delete - нету, после require снова есть.... но код выполняется старый(((... Что делать? ![]() Как пример - шаблонизатор Mason, который каждый раз компилируется заново шаблон и код в нем... Это сообщение отредактировал(а) DaemonSuw - 19.2.2009, 16:01 |
|||
|
||||
NuINu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 19.7.2008 Репутация: 5 Всего: 6 |
точно не скажу но попробуй код подключения и использования модуля заключить в eval
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
DaemonSuw, похожая задача решается в mod_perl модулем Apache::StatINC, там это делается так:
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
DaemonSuw |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 11.3.2008 Репутация: 3 Всего: 3 |
ginnie, спасибо вам, надоумили поискать))) на спане все таки))) и как всегда - нашлось!!!
Так как у меня просто интерфейс WxPerl, а не mod_perl (хотя я уверен что проблема там та же есть)... то спас меня следующий модуль: Module::Reload->check('<модуль>'); Самое интересное посмотрели сорцы - все тоже самое, почему не работало вручную - загадка(...
Ведь суть одна: { delete $INC{$key}; потом require }, а eval тут не причем.... - просто обработка ошибок; Это сообщение отредактировал(а) DaemonSuw - 19.2.2009, 18:25 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |