2012-06-08 1 views

답변

4
  1. PACKAGE->can($fn)이며, 기본값은 패키지 main입니다. 존재하는 경우

can

  • defined &{$fn}
  • 또한이 기능을 사용하면 코드의 참조를 반환합니다.

    +0

    +1'PACKAGE-> can ($ fn)'(종종'main-> can ($ fn)'). '정의 된 '테스트는 나를 가렵 게 만듭니다. –

    +0

    예, 실제로, 패키지 -> 할 수 있습니다. & {$ fn}을 (를) 정의한다고 생각했지만 간단한 테스트를 망쳤습니다. 이것은 Stack Overflow와 쌍 프로그래밍과 같습니다. 고마워. – Don

    5

    can 메서드를 사용하고 싶은 유혹을받을 수 있지만 잘못되었으므로 상속을 받으면 오탐이 발생할 수 있습니다. exists을 사용하려고합니다.

    my $name = ...; 
    my @args = ...; 
    die("$name doesn't exist\n") if !exists(&$name); 
    (\&$name)->(@args); 
    

    $name->(@args)으로 충분할 것이다. 이상한 구문은 엄격한 것을 우회합니다.

    +0

    이것은 물론 상속 확인 *이 필요하지 않다고 가정합니다. –

    +0

    @ 로버트 P, 가정이 아닙니다. 그것은 OP가 요청한 것입니다 ("** 서브 루틴 **이 명명 된 경우 어떻게 테스트합니까?"). 그는 방법에 관해 묻지 않았다. subs에 대해서는'exists' (또는'defined'), 메소드에는'can'을 사용합니다. – ikegami

    +0

    사실, 둘 다 흥미로운 경우지만, 내 경우에는 패키지에 서브 루틴을 호출하는 주 프로그램이 있다는 것입니다. 그 서브 루틴에서 주 프로그램이나 내로드 패키지를 포함하여 주어진 이름으로 부를 수 있는지 알아야합니다. – Don

    관련 문제