目前还不清楚我为什么下面的一段代码给我的错误:即使我从Try :: Tiny的finally块中返回一个值,为什么我会得到'使用未初始化值'的警告?
Use of uninitialized value in addition (+) at combined_op_test.pl line 12.
我期待的$success_count
值由在每次迭代子程序的返回值递增。
下面是代码:
#!/usr/bin/env perl
use strict;
use warnings;
use 5.014;
use Try::Tiny;
my $success_count = 0;
for (1..10) {
$success_count += error_causing_sub();
}
sub error_causing_sub {
try {
die ("Error.");
} catch {
} finally {
if (@_) {
say "Error occured.";
return 0;
}
else {
say "Error did not occur.";
return 1;
}
};
}
任何帮助表示赞赏。
这并不完全。 'finally'的RV被忽略。如果失败,catch的RV是相关的,并且是空的。没时间写我自己的答案。你可以通过改变'catch {1}'来看到 – simbabque
5.14固定的if($ @)'。最后一个片段不使用'if($ @)',所以它在5.14之前就可以工作。 – ikegami