代码之家  ›  专栏  ›  技术社区  ›  Mithaldu

如何计算Perl代码中每个子代码的相应行数?

  •  4
  • Mithaldu  · 技术社区  · 15 年前

    我正在重构一个相当大的代码体,在思考如何处理这个问题时,我想到了一个深奥的问题。这段代码在很大程度上需要缩短SUB。

    因此,将某种类型的统计信息收集器指向目录是非常有利的,它将遍历所有的.pm、.cgi和.pl文件,找到所有的sub(如果它只得到命名的文件,我很好),并给我一个所有sub的表,以及它们的行数。

    我粗略地看了一下PPI,但找不到任何直接相关的工具,有些工具可能是合适的,但使用起来相当复杂。

    有没有更简单的模块可以这样做?

    如果失败了,你会怎么做?

    编辑:

    稍微玩弄一下PPI,然后创建一个脚本来收集代码库中的相关统计信息: http://gist.github.com/514512

    2 回复  |  直到 15 年前
        1
  •  10
  •   Pedro Silva    15 年前
    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;
    
        2
  •  3
  •   Ether    15 年前

    我怀疑简单地识别长函数是识别需要重构的内容的最佳方法。相反,我会运行代码 perlcritic 在越来越严厉的程度上,并遵循建议。