|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Slawa Olhovchenkov 2:5030/500 07 Sep 2005 19:37:46 To : Sergey Skvortsov Subject : perl модули -------------------------------------------------------------------------------- 07 Sep 05, Sergey Skvortsov writes to Slawa Olhovchenkov: >> Hу я же объяснял, что данный кусок универсальный и не зависит от >> количества плагинов и их функциональности. Все это он должен определять >> динамически, в момент запуска. Hу и лежит это все не в системных >> каталогах. SS> Я бы сделал так: SS> 1. положил модули в отдельный каталог: SS> /usr/local/www/ SS> lib/ SS> My/Module/ SS> Plugin1.pm SS> Plugin2.pm SS> ... А смысл? SS> script.cgi: SS> ================ SS> use strict; SS> use warnings; SS> use lib '/usr/local/www/lib/'; SS> my $PLUGIN_DIR = '/usr/local/www/lib/My/Module/'; SS> my $class_prefix = 'My::Module::'; Я не хочу привязываться к конкретным путям. Они типа меняются от инсталяции к инсталяции. SS> my %MODULES; SS> opendir(my $dh, $PLUGIN_DIR) || die "can't opendir('$PLUGIN_DIR'): $!"; SS> while(my $file = readdir($dh)) { SS> next SS> unless $file =~ /^(\w+)\.pm$/; SS> my $class = $class_prefix.$1; SS> eval "use $class;"; SS> die $@ if $@; SS> $MODULES{ $class->ident } = $class; SS> } Вообще-то $class->ident это функция, возвращающая хэш из кейвордов и их кратких описаний (для основных действий). SS> closedir $dh; SS> # PROCESS REQUEST SS> (my $action) = ($query->path_info() =~ m!^([^/]+)!); SS> die "bad action '$action'" SS> unless exist $MODULES{$action}; И набор action в основном скрипте не определен. И вызывают его просто http://site/admin. SS> my $class = $MODULES{$action}; SS> $class->action($query); И соответственно в начале надо нарисовать простыню в которой внятно рассказать чего у нас нынче есть на обед из основных блюд. А в деталях оно потом может меняться. Чему твой вариант никак не соответствует, бо старта-то у него и нету, в очередной раз повторяю. >> Так что, без eval в этом месте -- никак? SS> Hикак. Разве что 'no strict "refs"' - но это пошло. Hу и ладно SS> Ты же в динамике всё это загружаешь. Hу вдруг чего проглядел. ... Командир сказал хорек! И никаких сусликов! --- GoldED+/BSD 1.1.5 * Origin: (2:5030/500) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/2221431f0ad3.html, оценка из 5, голосов 10
|