![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
korob2001 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Поясню на примере. Допустим мы принимаем от пользователя числа и делим их, если пользователь попытается разделить первое число на 0, то программа просто завершится крахом. Например если выполнить такой код:
То он закончится такой ошибкой: Illegal division by zero at Untitled line 3., т.е. программа завершилась аварийно. Тепь давай перехватим ошибки при делении и выведем более понятное сообщение и продолжим выполнение программы, перепишем наш код так:
Мы не получим ошибки этапа исполнения, но мы так и не обработали её, просто перехватили. Давай теперь попробуем вывести какое-нить сообщение и подолжим выполнение программы. Если eval перехватил ошибку этапа исполнения, то он сохраняет её в специальную переменную: $@. Вот и проверим её.
В итоге мы получим наше сообщение об ошибке, которое будет присвоено переменной $res, в том случае если возникнет исключительная ситуация этапа исполнения. Если изменить значение переменной $num2 на допустимое число, то мы не получим нашего сообщения, а просто получим результат деления. Всё это хорошо, но у eval есть ещё одна форма eval 'выражение', которая компилирует какой-либо участок кода на лету, на этапе исполнения и перехватует все исключительные ситуации, так же как и первая, но выполняется гораздо медленнее первой, так как она анализирует каждый раз синтаксис. Если кто-то знаком с такими языками как Java, C++, то наверняка знакомы с блоком try {}, eval в Perl выполняет те же функции. Вот аналогичный код проверки деления на 0, только выполняется гораздо медленне:
На самом деле eval { }, это своего рода блок кода из которого можно выходить в любой момент, с помощью return, так же у этого блока своя область видимости как и у обычного блока, т.е. если испоьзовать лексические переменные, то они будут видны в этом блоке. Впринципе это и есть блок. Ну вот, вроде основное описал. :rolleyes Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |