|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Sergey Skvortsov 2:5020/400 07 Sep 2005 15:49:56 To : Slawa Olhovchenkov Subject : Re: perl модули -------------------------------------------------------------------------------- Slawa Olhovchenkov wrote: > > Hу я же объяснял, что данный кусок универсальный и не зависит от количества > плагинов и их функциональности. Все это он должен определять динамически, в > момент запуска. Hу и лежит это все не в системных каталогах. Я бы сделал так: 1. положил модули в отдельный каталог: /usr/local/www/ lib/ My/Module/ Plugin1.pm Plugin2.pm ... script.cgi: ================ use strict; use warnings; use lib '/usr/local/www/lib/'; my $PLUGIN_DIR = '/usr/local/www/lib/My/Module/'; my $class_prefix = 'My::Module::'; my %MODULES; opendir(my $dh, $PLUGIN_DIR) || die "can't opendir('$PLUGIN_DIR'): $!"; while(my $file = readdir($dh)) { next unless $file =~ /^(\w+)\.pm$/; my $class = $class_prefix.$1; eval "use $class;"; die $@ if $@; $MODULES{ $class->ident } = $class; } closedir $dh; # PROCESS REQUEST (my $action) = ($query->path_info() =~ m!^([^/]+)!); die "bad action '$action'" unless exist $MODULES{$action}; my $class = $MODULES{$action}; $class->action($query); Plugin1.pm ================ package My::Module::Plugin1; use strict; sub ident { 'plugin1'; } sub action { ... } 1; > Так что, без eval в этом месте -- никак? Hикак. Разве что 'no strict "refs"' - но это пошло. Ты же в динамике всё это загружаешь. -- Sergey Skvortsov mailto: skv@protey.ru --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/65775cfd93b6.html, оценка из 5, голосов 10
|