2012-07-03 2 views
1

나는 HTTPS 전송을위한 LWP 패키지와 XML 페이로드의 구문 분석을위한 XML::Simple 패키지를 사용하여 Perl로 작성된 SOAP 클라이언트를 가지고있다. 때로는 XMLin에 대한 호출이 die()와 함께 실패하고 내 스크립트가 죽어서 이것을 탐지하도록 작성한 모니터링 프로그램에 의해 다시 시작되어야합니다. 이것은 정말로 바람직하지 않습니다. 그래서 Perl이 die 메시지를 잡아낼 수있는 C++ 예외 처리 메커니즘과 같은 기능을 가지고 있는지 궁금 해서요. 오류를보고 무시하고 오류가 발생한 것처럼 스크립트를 계속 보냅니 까? 나는 Perl 도서의 숫자를 읽고 이것을 찾았지만 나는 뭔가를 찾을 수 없었습니다. 이것은 내 응용 프로그램을 죽이고 있지만 절대적으로해야하지 않는 한 내 자신의 XML 구문 분석 코드를 작성하고 싶지 않아.다른 perl 모듈에서 발생하는 다이 메시지를 잡는 것이 가능합니까?

+0

자체 오류 처리기와 함께 제공되는 [SOAP :: Lite] (http://p3rl.org/SOAP::Lite)와 같은 상위 수준 SOAP 라이브러리를 사용하십시오. – daxim

답변

5

예; 이 작업을 수행하는 기본 메커니즘이 될 것 인 eval :

그러나 Try::Tiny 등처럼 (그럼에도 불구하고이 위에 건설된다)보다 높은 수준의 구조를 사용해야하는 이유가
sub a { die "BAD"; } 
eval { a(); } 
print "Survived an exception [email protected]"; 

. (문서 맨 아래에있는 링크 참조).

+0

감사합니다. – mathematician1975

-2

"die"를 잡을 수는 있지만 catch를 통해 스크립트가 죽는 것을 막을 수는 없습니다. * "__DIE__"훅 루틴이 돌아 오면 예외 처리는 훅이 없을 때와 같이 계속됩니다. "goto", 루프 종료 또는 "die()"를 통해 후크 루틴 자체가 종료되지 않는 한 *

eval {} 블록 내에서 die()를 호출하기 쉬운 루틴을 실행할 수 있습니다. 그래도.

+0

그래서 본질적으로 패키지는 die()를 호출하는 조건을 패키지가 만날 때마다 종료됩니다. 내가 할 수있는 일은 전혀 없다. 오 잘 C + + 버전을 시작하는 것 같습니다 .... – mathematician1975

+0

잘 예, 그 중 두 번 말한 그 평가 제외 – fork0

관련 문제