如何计算perl代码中每个sub的相应行?

时间:2010-08-08 18:03:08

标签: perl statistics

我正在重构一个相当大的代码体系,在思考如何继续这个时,我会遇到一些深奥的问题。这段代码在很大程度上需要的是缩短潜艇。

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

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

是否有更简单的模块可以做这样的事情?

如果做不到,你会怎么做?

编辑:

稍微使用PPI并创建了一个脚本,用于收集代码库的相关统计信息:http://gist.github.com/514512

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:3)

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