Подскажите пожалуйста, как граматно реализовать следующее: Пишу движек сайта, нужен конфиг в котором описаны переменные, нужен default-конфиг в котором описаны "константы". Переменные конфига и "константы" частично рассчитываются динамически - т.е. 1 раз при загрузке соответствующего конфига. Основной движек должен в начале загрузить конфиг, конфиг должен загрузить default-конфиг. Переменные конфига и "константы" должны быть доступны движку. Далее, движек должен загрузить и проинициализировать основные библиотеки/модули и обеспечить работу с ними. По необходимости движек должен подгружать модули для расширения функциональности если это нужно (работа с БД). Посмотрел много OpenSource решений, сделал вариант приведенный ниже. Посоветуйте как его оптимизировать? Сделал такой вариант (мне кажется это плохой вариантом): Конфиг - 'engine_config.pl', в нем: (из него переменные доступны как '$ENGINE::VAR_NAME') { package ENGINE; $DIR_SITE_ENGINE = '/dir/...'; $DIR_SITE_ENGINE = '/dir/...'; $DB_HOST = 'www.host.com'; # и так далее } require 'engine_def_config.pl'; Default-конфиг - 'engine_def_config.pl', в нем: (его переменные подгружаются в тот же userspace) { package ENGINE; $DEF_VAR1 = 'value1'; $DEF_VAR2 = 'value2'; # и так далее } Загрузчик модулей 'engine.pm', в нем: package ENGINE; use Exporter; use strict; use lib $ENGINE::DIR_SITE_ENGINE_LIB; use lib $ENGINE::DIR_SITE_ENGINE_LIB_OTHER; require $ENGINE::DIR_SITE_ENGINE_LIB.'engine_config.pl'; use Carp qw(longmess); # Modules checks $CT::HANDLE_LOGGER = undef; eval { require ENGINE::Logger; }; if ($@) { print "No Logger"; } else { $CT::HANDLE_LOGGER = ENGINE::Logger->new(); } # Logger sub LOG { $ENGINE::HANDLE_LOGGER->add(@_) if ($ENGINE::HANDLE_LOGGER); } # и так далее В основном движке: require '..../lib/engine_config.pl'; use strict; use lib $ENGINE::DIR_SITE_ENGINE_LIB; use lib $ENGINE::DIR_SITE_ENGINE_LIB_OTHER; use ENGINE; # That module will load all needed... &ENGINE::LOG('info', 'Testing 1'); Хочется оптимизировать следующее: - не хочеся в каждом модуле писать 'use lib $ENGINE::DIR_SITE_ENGINE_LIB;', хетелось бы 1 раз это cдеалть чтобы все модули знали. - не хочеся в каждом модуле писать require '..../lib/engine_config.pl', хетелось бы 1 раз это cдеалть чтобы все модули знали. - надо чтобы движек мог при необходимости подгружать модули (например для работы с БД), не хочется во всех таких модулях делать 'use lib $ENGINE::DIR_SITE_ENGINE_LIB;' и 'require '..../lib/engine_config.pl'' - кстати 'require '..../lib/engine_config.pl'' в кадом модуле заново дергает 'engine_config.pl' и рассчитывает в нем переменные заново или это всетаки делается 1 раз? - хочется граматно подгружать необходимые модули чтобы они были доступны из движка, т.е. делать типа "requre 'module.pm'" для модулей вида: package ENGINE; use Exporter; use strict; use lib $ENGINE::DIR_SITE_ENGINE_LIB; use lib $ENGINE::DIR_SITE_ENGINE_LIB_OTHER; require $ENGINE::DIR_SITE_ENGINE_LIB.'engine_config.pl'; use Carp qw(longmess); # Modules checks $CT::HANDLE_DB = undef; eval { require ENGINE::DB; }; if ($@) { die "No DB"; } else { $CT::HANDLE_DB = ENGINE::DB->new(); } sub DB_OPEN { ... } Вызов функций такого модуля будет через: ENGINE::DB_OPEN(...);

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [RADIUS] Не могу собрать модуль (2010)
- Форум Почему не работает скрипт? (2013)
- Форум Прошу помощи с кросс-компиляцией библиотеки qt-gstreamer (QtGstreamer) для ARM (2017)
- Форум Помогите реализовать анимацию, пожалуйста! (2015)
- Форум Непростой ВПН (2022)
- Форум Непростая маршрутизация (2007)
- Форум Непростая задачка.... (2006)
- Форум Ошибка при обновлении мира (2013)
- Форум Не устанавливается Wine (2019)
- Форум [wget] непростые загрузки (2010)