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