Gal*_*ask 1 error-handling perl
我刚用表单完成了一个Perl脚本(效果很好):
my @plages_IP = ('10.7.10.103' ,'10,121,10,7', '10.120.10.10');
foreach my $IP (@plages_IP)
{
DO ALL THE THING I WANT;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,由于某种原因,我的列表中的1个或多个IP可能在我启动脚本时很忙.在这种情况下,我得到一些perl错误(这是正常的)和脚本死:
'Error POSTing http://10,121,10,7/wcd/login.cgi: Can't connect to 10,121,10,7:80 (Bad hostname) at C:\Users\STAGEDVIR\Desktop\gnagna\Retrieve_Counter_C364_C224_C203.pl line 51.'
'Error POSTing http://10.64.10.3/wcd/login.cgi: Not Found at C:\Users\STAGEDVIR\Desktop\gnagna\Retrieve_Counter_C203.pl line 45.'
Run Code Online (Sandbox Code Playgroud)
如果发现错误但我跳过循环的下一个项目,我不希望它死;所有这些错误意味着相同的事情(IP当前很忙),通常,我想要做的是:
if(ANY_ERROR && LOOP_NOT_EMPTY)
{
DON'T DIE;
JUMP TO THE NEXT ELEMENT OF THE LOOP;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了一些解决方案eval{ routine_might_die }; warn $@ if $@;和一些方法,如:
unless($boolean_descripting_last_request->is_success)
{
print(STDERR "Currently busy $IP ! \n");
**next**;
}
Run Code Online (Sandbox Code Playgroud)
但是由于IP当前正忙,脚本一直在死于他发现的第一个错误.
你把它eval放在了错误的地方.如果你想在你的循环中捕获错误,eval那就把它放在那里.
my @plages_IP = ('10.7.10.103' ,'10,121,10,7', '10.120.10.10');
foreach my $IP (@plages_IP) {
eval {
# stuff that might die
};
warn $@ if $@;
}
Run Code Online (Sandbox Code Playgroud)
没有必要,next因为循环无论如何都会继续.