我需要一个静态分析工具(最好是scandeps.pl作为命令行脚本),该工具可以帮助您找到反向依赖关系(不仅是cpan)。
示例。一个项目具有模块site::Import
以及模块site::Import::A
和site::Import::B
,它们的代码中包含use parent 'Site::Import'
。我需要所需工具的输出像
$ rdepsscan site/Import.pm
site::Import::A (site/Import/A.pm)
site::Import::B (site/Import/B.pm)
就目前而言,我发现的最相关的方法是grep -r -E "use*.+site::Import" --exclude=\*.t .
,但它并不那么健壮,例如一个文件可以输出两次。它并没有涵盖不同模块可以在同一文件中的情况(尽管这是很不好的做法)
答案 0 :(得分:2)
find -name '*.pm' -print0 |
xargs -0 -l perl -e'require $ARGV[0]; CORE::say $ARGV[0] =~ s{^\./}{}r if $INC{"site/Import.pm"}' |
sort -u |
perl -ple'printf "%s (%s)\n", s{\.pm\z}{}r =~ s{/}{::}gr, $_'