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: