是的,问题出在我正在使用的库上,不,我无法修改它。我需要一个解决方法。
基本上,我正在处理一个写得很糟糕的 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
但是,我可以并且确实在 function() 中捕获了一些错误情况。在子例程和调用例程中设计错误捕获的最合适/优雅的方法是什么,以便我获得捕获和未捕获错误的正确行为?