|
|
ru.perl
- RU.PERL ----------------------------------------------------------------------
From : Victor Wagner 2:5020/400 18 Sep 2002 22:13:40
To : Serguei Trouchelle
Subject : Re: try {}
--------------------------------------------------------------------------------
Serguei Trouchelle <Serguei.Trouchelle@p1.f4077.n550.z2.fidonet.org> wrote: AK>> Есть ли в перле что то подобное как в си AK>> try {...} finally {...} ST> Этого даже в си нет. (Багландовые извpащения мы не считаем) Друзья, вы оба не правы! AK - тем, что эта конструкция не из сей, а из плюсов, ST - тем, что плюсы - не багландовые извращения, а вполне уважаемый язык. Правда, используемый гораздо чаще, чем он реально нужен, и без достойного понимания а)того что это отдельный язык, б) того как им следует пользоваться. В перле блок с перехватом ошибки реализуется с помощью eval { }; а перехваченная ошибка помещается в $@. (она при этом совершенно не обязана быть текстовой строкой, а может быть например объектом). Если мы собираемся выполнять действия, аналогичные finally, а потом ошибку выкидывать обратно, то следует делать так: eval { .... } my $saved_exception= $_ ... #здесь мы делаем то, что должно было быть finally die $saved_exception. Использование переменной для сохранения ошибки рекомендуется потому, что мы не можем быть уверены в том, что внутри функции, вызыванной из нашего блока finally, нет своего eval, который переопределит (а скорее всего очистит) $@ -- Машина должна работать, а человек думать. Дважды. Прежде чем ее выключить и развинтить. --- ifmail v.2.15dev5 * Origin: Free Net of Leninsky,45 (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/15178a49ac4a9.html, оценка из 5, голосов 10
|