![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Ramirez |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Столкнулся с необходимостью перехватывать если вызвана процедура не определенная в данном модуле. Попробовал сделать с помощью функции AUTOLOAD - не работает. Никак не пойму почему.
Есть модуль:
Вызываю таким способом:
И все равно пишет: Bareword "....." not allowed while "strict subs" in use at (eval 10) line 1. |
||||
|
|||||
korob2001 |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Так а зачем тебе перехватывать ошибку, если у тебя есть AUTOLOAD, по сути она это делает за тебя? В твоём случае eval не перехватывает ошибки, так как на самом деле её и нет, просто вместо несуществующего метода запускается AUTOLOAD который возвращает строку.
Насколько я понял, ты хочешь предотвратить аварийное завершение программы, если был вызван не существующий метод, с выводом сообщения об этом. Если да, то можно сделать так:
Здесь изменился только return на warn, так как если мы будем возвращать строку, то потом не сможем отличить её от того, что мог бы вернуть метод My::Mod::test(), если бы он существовал, от сообщения об ошибке.
Как видешь мы ничего не пропускали через eval и программа всё равно отрабатывает без аварийного завершения, правда с выводом предупреждающего сообщения. Если же ты хочешь перехватить ошибку с помощью eval, тогда нужно убрать AUTOLOAD и пропустить вызов метода через eval.
Основной код:
Здесь последняя строка нужна для того, что бы показать, что программа лишь предупреждает тебя и продолжает свою работу. Если же не перехватить ошибку, то программа завершит свою работу ещё при вызове несуществующего метода и разумеется последней строки ты не увидешь.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |