PERL 用EVAL 來捕捉異常Exception

來源:互聯網
上載者:User

$total=0;
$count=0;
eval { $average = $total / $count ; print "xxx/n";} ;
if ($@)
{
  print "wrong /n";
}
else
{
  print "right/n";
}
 
eval塊的結束時的分號是必須的,因為不像 if或者while那樣的控制結構,eval實際上是個函數。但是代碼塊是真的塊,所以可以包括詞法變數("my" 修飾的變數)和另外其它的arbitrary語句。因為是個函數,eval有像子常式那樣的傳回值(最後一個運算式的求值結果,或者由return語句返回的結果)。 當然,如果代碼塊失敗則沒有值返回;如果在標量環境將返回未定義值,在列表環境將返回一個空的列表。因此,比較安全的求平均值的代碼的寫法如下:
my $average = eval { $total / $count } ;

Perl也支援eval代碼塊的嵌套。只要代碼執行,eval塊總能捕捉錯誤,所以它能捕捉嵌套子常式裡發生的錯誤。儘管如此,eval不能捕捉到非常嚴重的錯誤,這些錯誤發生時Perl自己會中斷執行。這些錯誤包括無法捕捉的訊號,記憶體溢出或其它的災難。eval同樣不能捕捉到語法錯誤;因為Perl在編譯eval及其它代碼的時候檢查語法錯誤,而不是在運行時。還有,eval也不能捕捉警告。(但是Perl的確提供一個方法來捕捉警告資訊;可以查閱一下變數$SIG{__WARN__})。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.