如果我知道系统上安装了某个perl
模块,例如。 MyCompany::Database::Utils
,如何查看此模块的perl
代码?
答案 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::Dump
或Data::Dumper
转储整个哈希。但是,如果您真的只对一个模块感兴趣,那么您可以检查相关的哈希元素。像这样的声明
print "$INC{'MyCompany/Database/Utils.pm'}\n";
将显示找到并加载.pm文件的绝对路径