Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перекомпилировать модуль на этапе исполнения 
:(
    Опции темы
DaemonSuw
  Дата 19.2.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: 3
Всего: 3



Доброе время суток. 
Столкнулся со следующей проблемой - Как перекомпилировать модуль на этапе исполнения интерпретатором... то есть удалить его из памяти и заново загрузить...
Нужно для тестирования модулей, что бы не приходилось перезагружать/перекомпилировать всю прогу, то есть еще кучу модулей... Нужна компиляция на лету)...

Что стоит: ActiveState 5.10, WinXP smile.... 

Что делал:

1. no <модуль> - не помогло
   require <модуль> 

2. delete $INC{'<модуль>'};
require <модуль>  - тоже не помогло, то есть если посмотреть дампером перед delete модуль есть, после delete - нету, после require снова есть.... но код выполняется старый(((...
Что делать?  smile 

Как пример - шаблонизатор Mason, который каждый раз компилируется заново шаблон и код в нем...

Это сообщение отредактировал(а) DaemonSuw - 19.2.2009, 16:01
PM MAIL ICQ   Вверх
NuINu
Дата 19.2.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



точно не скажу но попробуй код подключения и использования модуля заключить в eval
PM MAIL   Вверх
ginnie
Дата 19.2.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



DaemonSuw, похожая задача решается в mod_perl модулем Apache::StatINC, там это делается так:

Код

delete $INC{$key};
eval{ require $key };
if ($@) {
       warn "Apache::StatINC: process $$ failed to reload $key. $@"
          if $DEBUG > 0;
}
else {
   warn "Apache::StatINC: process $$ reloading $key.\n"
          if $DEBUG > 0;
}



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
DaemonSuw
Дата 19.2.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: 3
Всего: 3



ginnie, спасибо вам, надоумили поискать))) на спане все таки))) и как всегда - нашлось!!!
Так как у меня просто интерфейс WxPerl, а не mod_perl (хотя я уверен что проблема там та же есть)... то спас меня следующий модуль:
Module::Reload->check('<модуль>');
Самое интересное посмотрели сорцы - все тоже самое, почему не работало вручную - загадка(...
Код

delete $INC{$key};
eval 
{
  require $key;
};
if ($@)
{
  warn "Module::Reload: error during reload of '$key': $@\n"
}


Ведь суть одна: { delete $INC{$key}; потом require }, а eval тут не причем.... - просто обработка ошибок;

Это сообщение отредактировал(а) DaemonSuw - 19.2.2009, 18:25
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.