perl - 是否有从 Perl 模块文件中提取所有变量、模块和函数名称的工具?

标签 perl module static-analysis

如果这是重复的,我深表歉意;我可能不知道要搜索的正确术语。

我的任务是分析作为较大应用程序片段的 Perl 模块文件 (.pm)。是否有工具、应用程序或脚本可以简单地检查代码并提取所有变量名、模块名和函数调用?更好的是可以识别它是在这个文件中声明的还是外部的。

这样的工具存在吗?我只得到一个文件,所以这不是我可以执行的——我猜只是一些基本的静态分析。

最佳答案

查看新的,但值得推荐的 Class::Sniff .

从文档:

use Class::Sniff;
my $sniff = Class::Sniff->new({class => 'Some::class'});

my $num_methods = $sniff->methods;
my $num_classes = $sniff->classes;
my @methods     = $sniff->methods;
my @classes     = $sniff->classes;

{
  my $graph    = $sniff->graph;   # Graph::Easy
  my $graphviz = $graph->as_graphviz();

  open my $DOT, '|dot -Tpng -o graph.png' or die("Cannot open pipe to dot: $!");
  print $DOT $graphviz;
}

print $sniff->to_string;
my @unreachable = $sniff->unreachable;
foreach my $method (@unreachable) {
    print "$method\n";
}

这将使您大部分时间到达那里。一些 variables ,根据范围,可能不可用。

关于perl - 是否有从 Perl 模块文件中提取所有变量、模块和函数名称的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1343630/

相关文章:

dependencies - typescript 中有没有什么好的静态代码分析工具?

perl - URL : Perl related technology? 中的 .mpl 扩展名

node.js - 如何使用 NodeJS 13 和 Typescript 3.8 导入 esm 模块?

c# - Ninject 模块的目的是什么?

使用 WALA 进行 Javascript 污点分析

jenkins - 如何加快 Sonar 分析工作?

mysql - 转义要在 Perl 中引用的字符串

perl - 如何使用 Perl 从 LDAP 中检索所有组

perl - 如何在 Perl 中执行区分大小写的重命名或移动操作?

javascript - 将当前文件中的所有函数导出为一个变量