我正在尝试使用Perl API从网站中提取数据。我正在使用URI列表来从网站获取数据。
最初问题是if there was no data available for the URI it would die,我希望它跳过该特定的URI并转到下一个可用的URI。我使用next unless ....;
来解决这个问题。
现在问题是我试图通过从API调用特定方法(称为identifiers()
)从Web中提取特定数据。现在数据可用于URI,但我正在寻找的特定数据(标识符)不可用,它就会死亡。
我试图像这样使用eval{}
eval {
for $bar ($foo->identifiers()){
#do something
};
}
当我使用eval{}
时,我认为它会跳过错误并继续前进,但我不确定。因为它提供的错误是Invalid content type in response:text/plain
。
虽然我手动检查了URI,但它没有标识符,但它有其余的数据。我希望这跳过并转移到下一个URI。我怎么能这样做?
答案 0 :(得分:3)
好吧,我想我理解你的问题,但是更多的代码会有所帮助,就像指定哪个Perl API一样 - 不是看起来对答案很重要,但它是你问题的重要部分。话虽如此,问题似乎很简单。
当Perl像大多数语言一样遇到错误时,它会按顺序通过调用上下文运行,直到它找到一个可以处理错误的位置。 Perl最基本的错误处理是eval{}
(但是如果可以,我会使用Try::Tiny
,因为更清楚的是你正在进行错误处理而不是eval可以做的其他一些奇怪的事情) 。
无论如何,当Perl点击eval{}
时,整个eval{}
退出,$&
设置为错误。因此,在循环外部eval{}
意味着错误将离开循环。如果将eval{}
放在循环中,当发生错误时,eval{}
将退出,但您将继续进行下一次迭代。就这么简单。
我还检测到您可能没有使用use strict;
和use warnings;
的迹象。请这样做,因为它们可以帮助您更快地发现许多错误。