|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alex Krivospitsky 2:5023/37.13 04 Jun 2003 11:30:22 To : Jahor Miadzviedziew Subject : plugins: how to? -------------------------------------------------------------------------------- Как-то вечером 03 Июн 03 , Jahor писал всем JM> прочего хочется сделать такую вещь: при запуске скрипт сканирует JM> определенный каталог на наличие в нем файлов, файлы из себя JM> представляют плагины, которые на выходе отдают сформированный отчет. JM> как такое реализуется? я это сделал так: загружаю плагины: my @plugins; LoadPlugins(); sub LoadPlugins { opendir DIR, 'plugins'; my @plugins_files=grep {/^pt_.+\.pm$/} readdir DIR; closedir DIR; foreach my $plugin_name (@plugins_files) { $plugin_name="plugins::$plugin_name"; $plugin_name=~s/\.pm$//; eval "use $plugin_name"; my $plugin=new $plugin_name; push @plugins, $plugin; } } потом по мере необходимости вызывал примерно так: foreach my $plugin (@plugins) { if (UNIVERSAL::can($plugin, 'Startup')!=undef) { $plugin->Startup; } } сам плагин выглядит примерно так: package plugins::pt_empty; use strict; sub new { my $class_name=shift; my $self={}; bless($self, $class_name); return $self; } sub Startup { my $self=shift; .......... .......... } т.е. это класс с заранее описанным интерфейсом. вданном случае есть функция Startup, которая потом вызывается для всех плагинов. по аналогии пишутся и остальные необходимые функции. Доброе утро. *Шурик*. --- =[ TEAM _ITD_ ]=[ TEAM _Beer_ ]=[ TEAM _ВыСПаТьСя Бы_ ]=[ TEAM _JT_ ]= * Origin: *+79036960762* _alex_itd@mail.ru_ (2:5023/37.13) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/33073edda143.html, оценка из 5, голосов 10
|