我可以重做 while 块异常处理吗

Can I redo with while block exception handling

我的异常处理捕获了异常,但重做时抛出了一些错误。

我正在使用第 3 方 api 获取超过 500 万条数据,但是 api 经常抛出 500 错误。

我正在使用异常处理,如果发生任何错误我想重做循环

eval{
while(my $productsRef = $se->iterate_products()) {
print Dumper($productsRef);
}
};
if ($@){
    sleep 30;
    redo;
}

如果捕获到某些异常,上面的代码会抛出错误

cant "redo" outside the loop

您不能 redo 在循环或 basic-block

之外
REDO_EVAL: {
  my $ok = eval {
    while(my $productsRef = $se->iterate_products()) {
      print Dumper($productsRef);
    }
    1;
  };
  if (!$ok){
    # print "$@\n";
    sleep 30;
    redo;
  }
}