如何检查安装的perl模块的代码?

时间:2016-02-17 23:41:25

标签: perl module

如果我知道系统上安装了某个perl模块,例如。 MyCompany::Database::Utils,如何查看此模块的perl代码?

3 个答案:

答案 0 :(得分:5)

使用您的操作系统提供的任何方式查找源代码文件。

如果您正在寻找正确安装的模块,可以使用perldoc -l查找文件,或使用perldoc -m打印文件(感谢@ThisSuitIsBlackNot,@ mob):

perldoc -l List::Util
perldoc -m List::Util

如果您的模块是MyCompany::Database::Utils,则您知道它必须位于MyCompany/Database/Utils.pm中某条路径下方@INC的路径中。

您可以使用

列出默认的@INC路径
perl -MData::Dumper -e 'print Dumper(\@INC);'

如果您使用的是mlocate系统(例如大多数Linux / BSD发行版),您也可以使用

找到该文件
locate MyCompany/Database/Utils.pm

如果您想查看分发以查看完整的来源(例如,查找XS代码,自述文件,单元测试等),您可以使用cpanminus' --look标记:

cpanm --look DateTime

答案 1 :(得分:3)

Perl可以找到该模块,所以让Perl告诉你它在哪里找到它!

perl -e'
   my $p = $ARGV[0];
   $p =~ s{::}{/}g;
   $p .= ".pm";
   require $p;
   print "$INC{$p}\n";
' MyCompany::Database::Utils

如果模块包含POD,您可以使用以下快捷方式:

perldoc -l MyCompany::Database::Utils

如果找不到模块,可能是使用MyCompany :: Database :: Utils的脚本操纵@INC以允许它找到模块。如果是这样,请将以下内容添加到脚本中:

END {
   my $p = "MyCompany::Database::Utils";
   $p =~ s{::}{/}g;
   $p .= ".pm";
   print "$INC{$p}\n";
}

答案 2 :(得分:3)

perldoc perlvar中记录的内置哈希%INC将每个模块的.pm源文件与其文件系统位置相关联

如果你有

use MyCompany::Database::Utils;

然后perl将搜索相对于数组MyCompany/Database/Utils.pm中列出的任何目录的@INC文件,如果找到,则将其绝对位置放入%INC哈希

要查找每个模块的位置,您只需使用Data::DumpData::Dumper转储整个哈希。但是,如果您真的只对一个模块感兴趣,那么您可以检查相关的哈希元素。像这样的声明

print "$INC{'MyCompany/Database/Utils.pm'}\n";

将显示找到并加载.pm文件的绝对路径