2014-09-16 2 views
3

일부 코드를 옮겨서 코드의 일부로 Try :: Tiny 사용을 생략했습니다. 내가 실행할 때 perl은 두 블록의 코드를 실행하여 catch가 실행되어 다행히 오류를 볼 수있게합니다. try와 catch를 레이블로 사용하고있는 것 같습니다. 라벨 뒤에 콜론이 필요하다고 생각 했나요? 펄은 왜 이것을 잡지 못했을까요?Try/catch에 대해 Perl이 에러를 발생시키지 않는 이유 Try :: Tiny

#!/grid/common/bin/perl 

use strict; 
use warnings 'all'; 

foo(); 

sub foo { 

    try { 
    print("hi\n"); 
    } 
    catch { 
    die "FATAL: this went wrong, <[email protected]>"; 
    } 

} 

답변

12

그것은 당신을 물고 indirect object syntax입니다 :

여기에 코드입니다. 정말,

(do { print("hi\n") })->try(
    (do { die("FATAL: this went wrong, <[email protected]>") })->catch 
) 

예 :

try { 
    print("hi\n"); 
} 
catch { 
    die "FATAL: this went wrong, <[email protected]>"; 
} 

는 다음과 같이 해석 가져옵니다.

간접 메소드 호출이 감지 될 때 컴파일시 경고를 줄 수있는 indirect 모듈이 있습니다.

+0

와우. 정말 못 생겼어. 나는 이것을 보았을 때 내가 미쳐 가고 있다고 생각했다. 이것에 대한 경고가 있었으면 좋겠다. 이런 일이 발생하면 다른 용도를 추가하는 것은 어리석은 것처럼 보입니다. 설명 해줘서 고마워. – kdubs

관련 문제