0
が、それはもはや利用可能ですは2
が、それはもはや利用可能ですは2
としてすぐに削除する必要がすぐに削除されるべき呼び出しの第二セットはeval
ではないためにも動作しないこと。
for (my $num_tries = 3; ;) {
last if eval {
my $stuff1 = function1();
my $stuff2 = function2();
function3();
return 1; # No exception.
};
--$num_tries
or die([email protected]);
chomp(my $e = [email protected]);
warn("$e Retrying...");
}
function4();
以上がeval
にfunction3();
を移動。あなたはそれが例外をスローすることを可能にしたい(または多分それは本当にreturn
、last
、などだ)場合は、代わりに次を使用することができます。
my $num_tries = 3;
while (1)
last if eval {
my $stuff1 = function1();
my $stuff2 = function2();
return 1; # No exception.
} || !--$num_tries;
chomp(my $e = [email protected]);
warn("$e Retrying...");
}
if ($num_tries) {
function3();
} else {
warn([email protected]);
}
function4();
これは再び少し複雑になって、それでは、サブを使わせています!あなたの答えのための
if (non_fatal_retry {
my $stuff1 = function1();
my $stuff2 = function2();
}, 3) {
function3();
}
function4();
おかげで、私は後に実行する必要があるコードを持っているので、私は、それはここで失敗した場合は死にたくない:
ソリューションとなります。エラーがなければ「どうすれば」他に入り、再試行があれば続行しますか? – Thomas
それを捕まえるには 'eval'を使うか、' last'とフラグを使う。その宣言を動かすことによって '$ num_retries'をフラグとして使うことさえできます。 – ikegami
私のコードを変更しましたが、これは機能しますか?私は、あなたがちょうど私に言ったことを、どのように使用するのか分からない、ありがとう! – Thomas