> > гм получается что 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 изучать... -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]