2010-08-08 3 views
4

필자는 다소 큰 코드의 리팩터링을하고 있으며, 어떤 종류의 밀교적인 질문이 나에게 찾아왔다. 이 코드가 많은 부분에서 필요로하는 것은 잠수함의 단축입니다.어떻게 perl 코드에서 각 하위의 각 줄을 셀 수 있습니까?

이와 같이 모든 .pm, .cgi 및 .pl 파일을 거쳐야하는 디렉토리의 일종의 통계 수집기를 가리키며 모든 하위를 찾을 수 있으면 매우 유용 할 것입니다. 지명 된 것) 그리고 그들의 선 수와 함께 저에게 모두의 테이블을 준다.

필자는 PPI를 단순한 표정으로 보았지만, 적절한 도구 일 수도 있지만 사용하기가 다소 복잡한 도구를 사용하여 PPI를 직접 찾을 수는 없었습니다.

이렇게 쉬운 모듈이 있습니까?

실패하면 어떻게할까요?

편집 :

는 PPI와 함께 주위에 비트를 플레이하고 코드베이스에 관련 통계를 수집하는 스크립트를 생성 : http://gist.github.com/514512

+0

문서의 모든 하위 요소를 찾기 위해 ppi를 사용할 수 있다고 생각합니다. 그러면 모든 요소는 하위 요소의 '하위 요소'이며 계산됩니다. – xenoterracide

답변

10
my $document = PPI::Document->new($file); 

# Strip out comments and documentation                                    
$document->prune('PPI::Token::Pod'); 
$document->prune('PPI::Token::Comment'); 

# Find all the named subroutines                                      
my $sub_nodes = $document->find(
    sub { $_[1]->isa('PPI::Statement::Sub') and $_[1]->name }); 

print map { sprintf "%s %s\n", $_->name, scalar split /\n/, $_->content } @$sub_nodes; 
+0

남자, 그게 훨씬 더 많았습니다. 내 마음이 복잡해질 필요가 있었다. 고마워. – Mithaldu

3

단순히 긴 기능을 확인하는 것이 가장 좋은 방법임을 의심스러운 해요을 리팩토링해야 할 대상을 식별합니다. 대신, 난폭하게 증가하는 수준에서 perlcritic을 통해 코드를 실행하고 제안을 따르십시오.

+3

현재 코드의 구조를 개선하려고합니다. 비평가는 기본적으로 저에게 이렇게 말합니다. "이 모든 것이 엉망입니다!" (하나의 모듈은 300 레벨의 서브 라인을 가지고 있으며, 레벨 12에 3 번 도달합니다.) – Mithaldu

+2

@mithaldu : 당신은 이미 무엇을 다룰 지에 대해 좋은 생각을 갖고있는 것 같습니다. 아이디어가 부족할 때 perlcritic은 훌륭합니다. 도움이되었지만 잠시 동안은 그렇지 않을 수도 있습니다. – Ether

+0

걱정할 필요가 없습니다. 일단 비판적이라면 (비평, 작성, 대략 재구성 등) 일단 비판을 던지면 비평가가 먼저 던질 것입니다. 결국, 나는 이것을 작성했다 : Dist :: Zilla :: Plugin :: ProgCriticTests :) – Mithaldu

관련 문제