Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка отсутствия модуля 
V
    Опции темы
GShadrin
  Дата 23.11.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 20.7.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Столкнулся с такой проблемой.
Есть программа на перле.
Ей нужны определенные перл-модули.
При отсутствии некоторых должна работать но с ограниченным функционалом.
Программа запускается под Linux.
Perl интерпретатор в случае если находит в коде use <имя модуля> выдает ошибку, мол модуль не установлен. Поэтому не удается реализовать работу с ограниченным функционалом, если модуль не установлен. Пытаюсь обрабатывать эту ситуацию следующим образом: use <имя модуля> || ( или or ) print "Работа в ограниченном режиме.......\n "; Ругается: 
syntax error at prog.pl line 22, near "use <имя модуля> or"
Execution of prog.pl aborted due to compilation errors.
Обращаю внимание, что запускаю в линуксе.

Ранее в виндоусе я делал аналогичное следующим образом. Нужен был модуль Encode. Я не писал use Encode в начале программы, а в определенном месте, и до этого места перл не ругался (в отличие от перла, который как мне кажется если видит конструкцию use <модуль> в любом месте ругается не смотря на то, что выполнение не дошло до этого места).

Как реализовать работу с ограниченным функционалом в линуксе?
PM MAIL   Вверх
DurRandir
Дата 23.11.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



our %loaded;
BEGIN{
  $loaded{'Encode'} = eval 'require Encode; Encode->import(); 1';
}


Строчку с загрузкой повторить нужное число раз. В результате в хеше %loaded по ключу Encode будет 1, если модуль загружен, или under, если не загружен.

Ваш метод не работает потому, что директива use - директива времени компиляции, а || ... - попыталась бы перехватить ошибку во время исполнения. Поэтому эта конструкуция и запрещена.

А здесь используется require вместо use, и BEGIN блок для того, чтобы переместить всю работу на этап компиляции. 
PM   Вверх
GShadrin
  Дата 23.11.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 20.7.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Спасибо за помощь.
Все получилось.

Это сообщение отредактировал(а) GShadrin - 23.11.2009, 19:04
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1735 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.