Да, проблема связана с библиотекой, которую я использую, и нет, я не могу ее изменить. Мне нужен обходной путь.
По сути, я имею дело с плохо написанной библиотекой Perl, которая завершается с 'die', когда при чтении файла возникает определенная ошибка. Я вызываю эту процедуру из программы, которая просматривает тысячи файлов, несколько из которых плохие. Плохие файлы случаются; Я просто хочу, чтобы моя процедура регистрировала ошибку и продолжала.
Если бы я мог изменить библиотеку, я бы просто изменил
die "error";
до
print "error";return;
, но я не могу. Можно ли как-нибудь составить программу, чтобы плохие файлы не приводили к сбою всего процесса?
СЛЕДУЮЩИЙ ВОПРОС: Использование eval для записи вызова, склонного к сбоям, работает хорошо, но как мне настроить обработку ошибок, способных перехватываться в этой среде? Для описания:
У меня есть подпрограмма, которая вызывает библиотеку, которая аварийно завершает работу, иногда много раз. Вместо того, чтобы объединять каждый вызов в этой подпрограмме с помощью eval {}, я просто позволяю ему умереть и использую eval {} на уровне, который вызывает мою подпрограмму:
my $status=eval{function($param);};
unless($status){print $@; next;}; # print error and go to next file if function() fails
Однако, есть ошибки, которые я могу и поймать в функции (). Каков наиболее правильный / изящный способ создания функции обнаружения ошибок в подпрограмме и подпрограмме вызова, чтобы я получал правильное поведение как для обнаруженных, так и для необнаруженных ошибок?