perl模块查找反向依赖关系(不仅是cpan)

时间:2019-08-13 11:36:20

标签: perl

我需要一个静态分析工具(最好是scandeps.pl作为命令行脚本),该工具可以帮助您找到反向依赖关系(不仅是cpan)。

示例。一个项目具有模块site::Import以及模块site::Import::Asite::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 .,但它并不那么健壮,例如一个文件可以输出两次。它并没有涵盖不同模块可以在同一文件中的情况(尽管这是很不好的做法)

1 个答案:

答案 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, $_'