2013-01-09 89 views

回答

7

將您的結束塊放在eval { .... }之內 - 這應防止您描述的行爲。

#!/usr/bin/perl 

print("hi there!\n"); 

END { 
    eval{ 
     print("goodbye\n"); 
     die("this can't hurt...."); 
    }; 

    #detect if an error occurred in the eval 
    if ([email protected]){ 
     print ("an error occurred: [email protected]\n"); 
    } 
} 
+1

太好了,這是訣竅。似乎並不適用於eval內的「exit(..)」? – OneSolitaryNoob

+1

@OneSolitaryNoob你不能通過'eval'來捕獲'exit'。 – dgw

3

Try::Tinyeval一個很好的包裝,讓您明確地處理運行時異常。

5

將您的代碼放入eval塊中,如果您想檢索die提供的錯誤消息,您可以使用if條件以外的條件捕獲。

#!/usr/bin/perl 
my $val=1; 
eval 
{ 
    print "Inside Eval\n"; 
    if($val == 1) 
    { 
    die "hello world\n"; 
    } 
    print "End of Eval\n"; 
}; 
if ([email protected]) 
{ 
     print "Error message - [email protected]" . "\n"; 
} 
+0

爲了顯示如何選取錯誤而做的+1做得很好 - 爲了完整性,我也給了我答案。 –