ОК, я думаю, что понимаю ваш вопрос, но немного больше кода помогло бы, как, например, указание, какой Perl API - не то, чтобы это казалось важным для ответа, но это большая часть вашего вопроса.Сказав это, проблема кажется очень простой.
Когда Perl обнаруживает ошибку, как и большинство языков, он исчерпывает контексты вызова по порядку, пока не найдет место, где он может обработать ошибку.Самая базовая обработка ошибок в Perl - eval{}
(но я бы использовал Try::Tiny
, если вы можете, так как тогда становится понятнее, что вы делаете обработку ошибок вместо некоторых других странных вещей, которые может сделать eval).
В любом случае, когда Perl нажимает eval{}
, весь из eval{}
завершается, и $&
устанавливается на ошибку.Таким образом, наличие eval{}
вне цикла означает, что ошибки покинут цикл.Если вы поместите eval{}
внутри цикла, то при возникновении ошибки eval{}
завершится, но вы перейдете к следующей итерации.Это так просто.
Я также обнаруживаю признаки того, что, возможно, вы не используете use strict;
и use warnings;
.Пожалуйста, сделайте это, так как они помогут вам быстрее найти много ошибок.