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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по загрузке модулей 
:(
    Опции темы
shamber
Дата 18.1.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



Доброгро времени суток.

Вопрос следующий.
Как можно организовать замену функции в модуле в realtime?
т.е. есть серверный модуль, который подключает модуль test.
Код

package test;

sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}

sub start{ # в этой функции описываются, те хуки, котоые мы хотим поставить
    print "hello";
}

1;

Dj время работы захотелось изменить поведение функции start.

Код

sub start{ # в этой функции описываются, те хуки, котоые мы хотим поставить
    print "ehlo";
}


как такое можно организовать без перезагрузки серверного модуля?

PM MAIL Jabber   Вверх
Zuzu
Дата 18.1.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Создай два клаccа с наследованием от класса test.  Переопредели там метод start

Код


package test;
use strict;

sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}

sub start{ 
    print "hello";
}

# -----------------------------------------

package test1;
use strict;

use base qw/test/;

sub start {
  print 'Helo ';
}

# -----------------------------------------

package test2;
use strict;

use base qw/test/;

sub start {
  print 'ehlo ';
}


# -----------------------------------------

package main;
use strict;

my $aTest;

$aTest = new test1;
$aTest->start();

$aTest = new test2;
$aTest->start();

print "\n";


my @aTestList;                           # коллекция объектов

push @aTestList, test1->new;     
push @aTestList, test2->new;
push @aTestList, test2->new;
push @aTestList, test1->new;
push @aTestList, test1->new;

foreach $aTest (@aTestList) {   # полиморфизм
   $aTest->start();
}

exit;



Код

Helo ehlo 
Helo ehlo ehlo Helo Helo 

Этого хотел?

Это сообщение отредактировал(а) Zuzu - 18.1.2007, 17:53
--------------------
Проводить эксперименты на живом сервере опасно, а на мертвом - бесполезно.
PM   Вверх
Nab
Дата 18.1.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да очень просто, так как это и сделано в плугинах для CGI::Application smile
Я так понимаю это он smile

просто импортируете функцию с таким именем в пространство имен базового модуля, и пользуйтесь...

Если Вам нужно переопределить именно start, то как верно  заметил Zuzu, просто в потомке переопределяете...
Ну а если это конкретно CGI::Application? то этот метод и предназначен для переопределения в потомках, именно в нем должны задаваться параметры режимов и всего остального....


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
shamber
Дата 18.1.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



Спасибо Всем.
Ситуация следующая.

Есть главный скрипт, который подключает плагины(модули).
Скрипт работает, и тут я понимаю, что хочется поменять одну\несколько функций в одном плагине.

Плагин исправил.

Но как им заменить уже его работающую неисправленную копию?
Механизм просто не до конца понимаю.

Ситуация которую изложил, отличается от моего первого поста? smile 
PM MAIL Jabber   Вверх
Nab
Дата 19.1.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ответь конкретно, это на основе CGI::Application, или нет?

Если на нем, то может повесить правильный хук, если нет, то можно создать потомка плагина и в головном модуле подключать его а не родительский плугин...

Короче много от чего зависит, как организована работа с плугинами, их порядок загрузки, и т.д. 



--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
shamber
Дата 19.1.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



Нет. Это не на основе CGI::Application.

А где можно почитать, о работе с плагинами ? Есть материалы на эту тему?
PM MAIL Jabber   Вверх
Zuzu
Дата 19.1.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(shamber @  19.1.2007,  02:03 Найти цитируемый пост)
Но как им заменить уже его работающую неисправленную копию?
Механизм просто не до конца понимаю.


Наверно, на ходу никак.
Скопируй на место новый файл, перегрузи web-сервер smile


--------------------
Проводить эксперименты на живом сервере опасно, а на мертвом - бесполезно.
PM   Вверх
Nab
Дата 19.1.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(shamber @  19.1.2007,  12:43 Найти цитируемый пост)
Нет. Это не на основе CGI::Application.

А жаль, тут бы я тебе помог smile

Цитата(shamber @  19.1.2007,  12:43 Найти цитируемый пост)
А где можно почитать, о работе с плагинами ? Есть материалы на эту тему?
 Боюсь нет, потому как эти системы могут быть очень разные, и точки подключения , и способ взаимодействия тоже smile

На CAPN есть OpenPlugin, но он основан тоже на CGI::Application, и там реализация вполне универсальна, но достаточно заумная smile. 
Я к примеру сейчас к своему проекту новый интерфейс продумую и для плагинов в том числе... smile
А вообще это такая вещь где лучше учиться на готовых реализациях..
Поищи на CPAN по слову Plugin плучишь кучу всего... выбери систему попроще или с которой сталкивался и изучи плагины и работу с ними... возможно появятся какие идеи... 


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
shamber
Дата 19.1.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



Цитата(Nab @ 19.1.2007,  18:43)
Поищи на CPAN по слову Plugin плучишь кучу всего... выбери систему попроще или с которой сталкивался и изучи плагины и работу с ними... возможно появятся какие идеи...

Спасибо за подсказку... буду думать.
Просто я тут тоже решил, маленький сервер на POE организовать,подключением  плагинов на лету.... Так что присматриваюсь.
Приписываюсь
 smile 
Буду смотреть POE::COMPONENT::IRC::Plugin
/ smile 

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


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

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


 




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


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

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