![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| comtat |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1310 Регистрация: 2.5.2006 Где: Россия, Казань Репутация: нет Всего: 71 |
тоесть в качестве параметров отдаем путь до директории с pm файлом
если пусто или Null то считаем что модуль системный и второй параметр имя pm файла если невозможно подключить (неправильный путь или неустановлен), вывод ошибки есть ли реализованные аналог loadlib(path, pm file) ? если нет то как по правильному строить логику (как проверять и тп) спасибо -------------------- Рожденный в СССР !!! ExtJS - мой фреймворк |
|||
|
||||
| Ivan Kolesnikov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: нет Всего: 6 |
Для поиска модулей добавяться директории lib в директории со скриптом и еще одна директория, путь к которой задан абсолютно В этих путях модули могут быть в каталогах, тогда имя модуля будет Dir1::Dir2::Name... --------------------
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 8 Всего: 37 |
Я на днях окончил свой модуль который строит .packlist с использованием стандартного ExtUtils::Packlist, наподобие того что строит perl для своих модулей... на него вы можете глянуть в своей директории /usr/local/lib/perl/lib ну или c:\perl\lib, ну или где там у вас установлен перл
Мне этот модуль понадобился не только для того чтоб знать где какие модули находяться, но чтоб я мог, подключать их на ходу, хранить дополнительные параметры для файла, и для другого функционала.... потому как моя разработка юзает море модулей , и две системы плагинов А код загрузки модуля, по имени во время исполнения, а не на этапе компиляции таков:
Вообще-то там нюансов целое море... Так что спрашивайте... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| comtat |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1310 Регистрация: 2.5.2006 Где: Россия, Казань Репутация: нет Всего: 71 |
Возвращаясь к сабжу.. сделал вот такую штуку
В качестве параметров отдается Название библиотеки и имя модуля(программы, типа календарь и тд) Если приходит только имя библиотеки, то ищу в глобальных библиотеках если нет то в системных perl Если приходят оба параметра, то ищу локально в данном модуле
Как и что тут можно и нужно доработать ?? -------------------- Рожденный в СССР !!! ExtJS - мой фреймворк |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 8 Всего: 37 |
Во первых нужно определиться что вы подразумеваете под названием библиотеки и под именем модуля, а лучше использовать общепринятые названия, имя модуля и имя файла.
Во вторых, это нонсенс заганять ключи хеша в массив, а потом проверять наличие его там с помощью левой функции, exists для кого существует? В третьих думаю лучше писать системонезависимый код, и вместо вашего формирования путей вручную, нужно пользоваться File::Spec::catfile. Тогда слеши будут правильные, а возможно и не слеши если это Mac В четвертых вызывать require можно без проверки наличия в загруженных, перл его сам второй раз грузить не будет уж поверьте В пятых, если у вас есть возможность того что имя модуля не верно, то подключать его лучше через eval, тогда и лишнее сканирование @INC не понадобиться. А в шестых, это вообще все лишнее Есть модуль UNIVERSAL::require. Он добавляет каждому пакету метод use и require. то есть вы можете во время исполнения подключить любой модуль так MyLib::MyModule->use; debugMsg("Not Load library ".$UNIVERSAL::require::ERROR) if $UNIVERSAL::require::ERROR; или если импортирование не нужно то MyLib::MyModule->require; debugMsg("Not Load library ".$UNIVERSAL::require::ERROR) if $UNIVERSAL::require::ERROR; там внутри уже все сделано и позволит избежать многих проблем. Так как там идет переопределение UNIVERSAL, то я к примеру вызываю UNIVERSAL::require, только один раз в головном модуле, во всех остальных его звать не нужно, эти методы глобальны и будут работать везде... То есть вся моя писанина сводиться к тому, что не стоит изобретать велосипед, а нужно сразу спрашивать, а есть ли модули с таким функционалом -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| comtat |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1310 Регистрация: 2.5.2006 Где: Россия, Казань Репутация: нет Всего: 71 |
Признаю ступил
А этого незнал Спасибо, за критику перепишу с использованием UNIVERSAL::require Это сообщение отредактировал(а) comtat - 11.9.2007, 22:09 -------------------- Рожденный в СССР !!! ExtJS - мой фреймворк |
||||
|
|||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |