[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Обработка исключений на perl



> > гм получается что return именно из eval return
> > а следовательно получается если из под eval надо return из подпрограммы
> > то надо переменные городить :(
> > ладно, подумаем
> 
> По моему, ты всё-таки недопонял. 
> 
> > тогда непонятно почему следующая конструкция работает:
> 
> А по этому вопросу видно что именно ты недопонял. evla умеет возвращать 
> значение, примерно как программа на перле может вернуть значение (код 
> возврата) и, как везде в перле, значение можно задать либо явно (return), 
> либо неявно(последнее вычисленное значение). А die -- это именно исключение, 
> если его ловят (оно внутри eval), то завершается блок eval аварийно, если 
> нет, то завершается программа. Возможно, прочтение документации тебя 
> окончательно просветит.
хорошо, посоветуйте тогда что писать вместо кода:

sub abcde
{
 eval
 {
  ...
   return $a;  # подразумеваем выход из abcde
 };
 if ($@) ...
}

теоретически можно написать
  my $result=eval {...};
  return $result unless ($@);
  ...

но это введение лишней переменной

а вот

return eval { ... }; unless ($@);

не работает
даже если  eval { ... }; в круглые скобки взять

ну и еще goto на выход из под eval остается как вариант, но как-то ни
один из вариантов мне не нравится :(

может это просто во мне привычка к другим языкам работает где return
внутри блока try-except (try-catch итп) работает выходом из функции...
если надо мышление перестраивать, то подскажите в каком направлении?

PS: а кстати такой вариант будет работоспособен?

eval
{
...
  return что-то;
};
return unless ($@);
#обработка ошибки

по идее наше "что-то" должно вернуться из функции (в отсутсвие ошибок),
правильно я понимаю? или есть какие-то подв камни опять?

сорри за ламерские вопросы, я только начал Perl изучать...



Reply to: