|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Slawa Olhovchenkov 2:5030/500 06 Sep 2005 14:34:34 To : Sergey Skvortsov Subject : perl модули -------------------------------------------------------------------------------- 06 Sep 05, Sergey Skvortsov writes to Slawa Olhovchenkov: >> >> А можно кратенько для тех кто в танке и все пропустил? >> >> А то я сейчас man perlmod читаю и основная суть от меня что-то >> >> ускользает. >> >> А по внутренностям того, что внутри модуля -- разница есть? >> >> SS> "require My::Module" - это как "require /path/to/My/Module.pm", но >> SS> загружается лишь единожды. >> >> Что значит "единожды"? SS> Если ты дважды в коде вызовешь "require My::Module", то реально он SS> загрузится лишь в первый раз. При повторном вызове, если такой модуль уже SS> был загружен, ничего не произойдет. Это как #include <my/module.h>: а несколько require "/path/to/My/Module.pm" выполняться несколько раз? Hа это мне наплевать. И больше разницы нету? >> SS> в целом "require" используется ну очень редко. >> >> редко? почему? SS> потому что есть "use" и packages лучше скриптов. Так и require с теми же packages работает. >> SS> use My::Module; >> SS> use My::Module::Admin; >> SS> use My::Module::User; >> >> Вот от такого списка хочется избавится. Хочется просто понакидать в >> каталог нужный набор модулей, а тут автомагическим циклом его >> активировать. В целом понято -- в центральном скрипте readdir с require >> "$file", в модуле что-то типа BEGIN { $main::common_hash{'ident_module'} >> = \&sub_module; }; SS> Тогда возвращаясь к истокам - это идеологически неправильно. SS> Если очень хочется - лучше использовать lazy evaluation: SS> (my $action) = ($query->path_info =~ /^(\w+)/; SS> my $class = 'My::Module::'.$action; SS> # try load specific handler SS> eval "use $class;"; SS> unless($@) { SS> $class->process(); SS> }else { SS> # fallback SS> } Фига-с два. Hе будет это работать, поскольку ни контроля ни старта нету. Грубо говоря при запуске без параметров я хочу нарисовать простыню с общим смыслом "вот такие основные action у нас сегодня доступны". Hу с BEGIN мне и самому уже разонравилось, я больше сейчас склоняюсь к чему-то типа readdir, потом require "$file" и в том же цикле $common_hash{$module::ident} = \&$module::action; ... Истинная цена живого человеческого общения -- счета от пpовайдеpа --- GoldED+/BSD 1.1.5 * Origin: (2:5030/500) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/2221431d7249.html, оценка из 5, голосов 10
|