2012-07-03 58 views
1

我有一個用Perl編寫的SOAP客戶端,使用LWP包進行HTTPS傳輸,XML::Simple用於解析XML有效載荷。有時候,致XMLin的電話會失敗(die)(),然後我的腳本就會死掉,並且必須由我編寫的用於檢測此問題的監視程序重新啓動。這實在是不可取的,所以我想知道Perl是否有像C++異常處理機制那樣的設施,我可以捕獲死信息,忽略它報告錯誤並讓我的腳本繼續,就像發生錯誤一樣?我已經閱讀了大量的Perl書籍,並期待這一點,但我還沒有設法找到一些東西。這是殺死我的應用程序,但我不想寫我自己的XML解析代碼,除非我絕對必須。是否有可能捕獲另一個perl模塊內發生的消息?

+0

使用自帶錯誤處理程序附帶的高級SOAP庫,例如[SOAP :: Lite](http://p3rl.org/SOAP::Lite)。 – daxim

回答

5

是;這樣做的基本的機制將是一個eval

sub a { die "BAD"; } 
eval { a(); } 
print "Survived an exception [email protected]"; 

但是,有爲什麼要使用更多的高層次結構(這是在此之上構建仍然),如Try::Tiny等原因。 (請參閱文檔底部的鏈接)。

+0

謝謝,我會試試這個。 – mathematician1975

-2

你可以捕捉到「死」,但你不能通過捕捉來阻止你的腳本死亡:*當「__DIE__」鉤子例程返回時,異常處理將繼續,因爲它沒有鉤子,除非鉤子程序本身通過「goto」,循環出口或「die()」退出。*

您可以運行易於在eval {}塊內調用die()的例程,雖然。

+0

所以基本上,那麼當程序包遇到一個調用die()的條件時,我的腳本就會終止。我根本無能爲力?哦,看起來像我更好地啓動C++版本.... – mathematician1975

+0

好吧,除了你現在被告知兩次的評估 – fork0

相關問題