Пишу программу с примерно такой архитектурой:
/global.cgi - инициализирующий скрипт, ловящий переменную с задачей и решающей, какой модуль подгрузить (action.pm)
/lib/module.pm - модуль часто используемых функций
/lib/action1.pm - модуль конкретной задачи
/lib/action2.pm - модуль конкретной задачи
/lib/action3.pm - модуль конкретной задачи
В базе хранятся настройки, которые получает из базы global.cgi и сохраняет их в глобальных хэш. Так вот, необходимо, чтобы этот кеш был виден и в других модулях. Конечно можно передавать ссылку на хэш в каждой функции, но это геморройно, т.к. по идее инициализирует программу global.cgi, который обращается к функции из action.pm, которая пользуется функциями из module.pm и везде нужен этот хэш.
Раньше этот хэш инициализировался в module.pm и импортировался, однако сайт работает под mod_perl и когда запустили копию сайта с другими настройками, получилось, что иногда сайт 1 получал настройки сайта 2. Скорее всего mod_perl видел, что библиотека lib::module уже загружена и импортировал настройки ее, а они допустим первого сайта. Из-за этого решил получение настроек перенести в корневой скрипт global.cgi, однако не понимаю, как передавать настройки модулям. Возможно, можно было просто lib::module сделать объектно-ориентированным и тогда не было бы проблем с mod_perl, но я с ООП не дружу и не знаю, верны ли мои суждения. Знаю, только что есть %ENV, который виден во всех модулях, поэтому есть надежда, что такое можно реализовать. Если у вас есть мысли, как такое сделать, то буду благодарен. Если непонятно написал, напишите, я попробую подробнее объяснить. Уже тонны информации перерыл, но пока безрезультатно.