检查是否使用过导入的模块

时间:2017-10-24 13:48:26

标签: perl

无论出于何种原因,我的同事(可能是我过去)已经导入了我们不会用于我们项目的模块。很糟糕的是,导入甚至不存在的模块。

在Perl中,您可以这样说:

use Socket;
gethostname("DERP");

很难从该函数中判断出它与套接字模块有关。

是否存在任何我不知道的Perl程序或Perl的某些功能可以告诉您是否已将膨胀导入脚本?

2 个答案:

答案 0 :(得分:4)

这就是我总是明确列出进口的原因。例如use Socket qw( gethostname );use Foo qw( );(后者不会导入任何内容而非默认值。)

一种方法是逐个文件并添加这些导入列表,然后停止加载带有空导入列表的模块,文件中不存在其包名称。

答案 1 :(得分:3)

使用分析器查看正在使用的模块。从中找出哪些不是。适合我:

  • 如果您没有(cpanm Devel::DProf或ubuntu:apt install libdevel-dprof-perl),请安装Devel :: DProf模块。较新的分析器也存在,即Devel::NYTProf
  • 在程序中将#!/use/bin/perl更改为#!/use/bin/perl -d:DProf,然后运行它。这将在您当前的目录中生成tmon.out文件
  • 运行dprofpp -aO9999分析tmon.out。这将输出所有已执行的潜艇,包括每一行的模块名称。

注意:如果有条件地调用sub(例如在if - 块内),如果条件始终为false,则探查器将不会列出它。它有助于获得具有完整代码覆盖率的测试套件并在分析模式下运行。