考慮到retrys給定函數某些給定的次數,如果函數拋出下面的包裝函數(不知道爲什麼格式是靠不住的):這個perl包裝函數可以擴展到任何輸入函數嗎?
sub tryit{
my $fun = shift;
my $times = shift;
my @args = @_;
my $ret;
do{
$times--;
eval{
$ret = $fun->(@args);
};
if([email protected]){
print "Error attemping cmd: [email protected]\n";
}
else{
return $ret;
}
}while($times > 0);
return;
}
這怎麼可能延長,使的返回值無論返回什麼樣的值,參數函數都可以正確地得到支持。例如,這個函數不會正確傳遞數組。你不能只返回$ fun - >(),因爲return只會將你帶出eval塊。
你能提供更多關於這個問題的細節嗎?例如,當返回值是一個數組時,會發生什麼? – Greg 2011-05-30 23:54:48
@greg如果返回值是一個數組,那麼$ ret被賦值爲最後一個元素 – frankc 2011-05-31 00:19:43
函數的返回值從不是數組。它可能是一個列表或對數組的引用。 – tadmc 2011-05-31 03:37:14