2010-01-07 4 views
27

die을 통해 예외를 throw하는 스크립트가 있습니다. 예외를 잡았을 때 첨부 된 위치 정보없이 메시지를 출력하고 싶습니다.어떻게 위치 정보없이 die() 메시지를 출력 할 수 있습니까?

이 스크립트 :

#! /usr/bin/perl -w 

use strict; 

eval { 
    die "My error message"; 
}; 
if([email protected]) { 
    print [email protected]; 
} 

출력 My error message at d:\src\test.pl line 7.

I 출력 얻기 위해 단지 선호 : My error message

희망 사람들은 내가하고 싶은 이유에 초점을하지를하지만, 누군가 관심이 있다면 :

내 방법은 orks를 사용하면 입력을 찾고 핸들러에 각 입력 부분을 전달합니다. 처리 할 수없는 입력 부분을 발견하면 모든 예외가 동일한 코드 조각에서 나옵니다. 따라서 위치는이 상황에서 대단히 도움이되지 않습니다.

답변

43

당신의 문자열로 \n을 추가

die "My error message\n" 

die에 설명되어 있습니다 :

리스트의 마지막 요소는 줄 바꿈하지 끝 않는 경우, 현재 스크립트 행 번호와 입력 행 번호 ( any 인 경우)도 인쇄되고 새 행 이 제공됩니다.

+1

감사 도구입니다. 그게 내가 찾고 있던거야! – chollida

+4

새로운 @ 무언가를 매일 배웁니다. – Erik

+3

와우는 어둡습니다! 감사합니다 – Bizmarck

2

모든 추가 정보는 die의 perlfunc 항목을 참조하십시오. 그리고 메시지를 \n으로 끝내십시오.

16

나는 이것을 설명하는 Mastering Perl의 "오류 처리"장을 가지고 있습니다. 당신은 단지 새로운 라인에 대한 참조로, 당신은 또한 수 die으로 메시지를 종료하여 파일과 줄 번호를 제거 할 수 있지만 :

eval { 
    time % 2 ? 
     die { 
      message => q(I died!), 
      level => 'really really serious', 
      } 
     : 
     die "I died as a string!\n"; 
    }; 

if(ref [email protected]) { 
    print "Reference message was [email protected]>{message}\n"; 
    } 
else { 
    print "[email protected]\n"; 
    } 

나는 오류 메시지의 끝에 줄 바꿈을 좋아하지 않는 경향이, 나는 천국 비록 귀하의 코드를 보지 못했습니다. 예외 상황에 추가 정보를 추가하여 상황을 추적 할 수있는 상황처럼 들립니다.

CPAN에서 많은 예외 모듈 중 하나를 사용하는 것도 고려해 볼 수 있습니다.

+4

답변 주셔서 감사 Brian. 나는 레퍼런스로 죽을 수 있다는 것을 몰랐다. 나는 이것이 매우 유용하다는 것을 알 수있다. – chollida

관련 문제