2012-01-30 2 views
1

이전에는 perl에서 서브 루틴 속성을 사용한 적이 한번도 없었지만 사용법을 찾았습니다. 그래서 어떻게 사용할 수 있는지 이해하려고했습니다. 특히 런타임에서 서브 루틴의 속성을 알아낼 수 있어야합니다. 나는 다음과 같은 테스트 코드를 가지고 있지만, 그것은 단지 빈 목록을 출력합니다속성 :: get() 빈 목록을 반환합니까?

use attributes; 

sub MODIFY_CODE_ATTRIBUTES { 
    my ($class,$code,@attrs) = @_; 

    my $allowed = 'takeshash'; 
    my @bad = grep { $_ ne $allowed } @attrs; 

    return @bad; 
} 
sub mylog : takeshash { 

    my $params = shift; 
    my $val = log($params->{'n'})/log($params->{'base'}); 

    return $val; 
} 

use Data::Dumper; 
print Dumper [attributes::get(\&mylog)]; 

펄 v5.12.4 실행, 내가 얻을 : 문제가 섹션으로 설명처럼

$ perl temp.pl 
$VAR1 = []; 

답변

2

가 보이는 Available Subroutinesattributes documentation입니다. get 서브 루틴에 대한 설명은 말한다 :

이 루틴은 단일 매개 변수 기대 - 서브 루틴 또는 변수에 대한 참조를. 비어있는 속성 목록을 리턴합니다. 이 잘못된 인수를 전달하면 die() (Carp :: croak을 통해)를 사용하여 치명적인 예외를 발생시킵니다. 클래스 메소드 조회에 대한 적절한 패키지 이름을 찾을 수있는 경우 아래의 패키지 특정 속성 처리에서 설명한대로 FETCH_type_ATTRIBUTES 호출의 결과를 반환 목록에 포함시킵니다. 그렇지 않으면 내장 된 속성 만 반환됩니다.

강조를 추가 한 마지막 문장을 확인하십시오. FETCH_CODE_ATTRIBUTES 서브 루틴을 추가해야하는 것 같습니다.

+0

감사합니다. RTFM에서 직접 알아낼 수 있었지만, 어떤 이유로 든 내 솔루션을 게시하기 위해 스택 오버플로를 할 수 없었습니다. –

관련 문제