Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     08 Jul 2003  18:44:11
 To : Dmitry Grebeniuk
 Subject : Re: обработка вложенных исключительных ситуаций
 -------------------------------------------------------------------------------- 
 
 Хмутро.
 
 DG> hi, All
 
 DG>   Хочется сделать обработку вложенных исключительных ситуаций и их передачу
 DG> наподобие такого:
 
 DG> {
 DG> local $SIG{'__DIE__') = sub { print "exc: $@" };
 DG>  {
 DG>  F = open "< file" or die "file open error: $!";
 DG>  my $cleanup = sub { close F };
 DG>  my $exception_handler = sub { &$cleanup; die "$@ (after cleanup)"; };
 DG>  local $SIG{'__DIE__') = $exception_handler;
 DG>  # работа с F, где может встретиться исключительная ситуация:
 DG>    die "file exception";
 DG>  #
 DG>  &$cleanup;
 DG>  };
 DG> };
 DG>   (пример с файлами совершенно условен)
 
 DG>   Конечно же, сия наивность не прокатит - в момент внутреннего die()
 DG> $SIG{__DIE__} указывает на $exception_handler.
 
 DG>   Придумалось решение - обернуть внутреннюю функцию в eval { block }, после
 DG> которого написать
 DG> die "$@ (re-raised)" if $@;
 DG>   , но это не очень красиво, имхо.  Можно ли без eval добиться подобного
 DG> поведения - передачи исключительной ситуации "наверх" изнутри обработчика?  
 DG> К примеру, в C++, не к ночи будет помянут, это делается простым оператором
 DG> throw без аргументов...
 
 А в perl это делается простым оборачиванием всего скрипта в eval { block } и
 забыванием про существование $SIG{__DIE__}. Аналога $SIG{__DIE__} в C++ вообще
 не существует.
 
 -- 
 Artem Chuprina
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757
 --- ifmail v.2.15dev5
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 обработка вложенных исключительных ситуаций   Dmitry Grebeniuk   08 Jul 2003 15:44:14 
 Re: обработка вложенных исключительных ситуаций   Artem Chuprina   08 Jul 2003 18:44:11 
Архивное /ru.perl/1147753dee433.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional