如果我知道某个系统上安装了某个特定的Perl模块,例如MyCompany::Database::Utils,那么我该如何检查此模块的Perl代码?
通过操作系统提供的任何方式查找源代码文件。
如果你正在寻找已经正确安装的模块,你可以使用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);'
locate MyCompany/Database/Utils.pm
--look
标志来查看分发情况:
cpanm --look DateTime
%INC
在perldoc perlvar
中有文档记录,将每个模块的.pm源文件与其文件系统位置相关联。use MyCompany::Database::Utils;
那么Perl将会在数组@INC
中列出的任何目录相对搜索文件,例如MyCompany/Database/Utils.pm
,如果找到了该文件,则将其绝对路径放入%INC
哈希表中。
要查找每个模块所在的位置,您可以使用Data::Dump
或Data::Dumper
来简单地转储整个哈希表。但如果您只对一个模块感兴趣,那么可以检查相关的哈希元素。像这样的语句
print "$INC{'MyCompany/Database/Utils.pm'}\n";
将显示找到并加载该 .pm 文件的绝对路径
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
@INC
以允许其找到该模块。如果是这样,请在您的脚本中添加以下内容:END {
my $p = "MyCompany::Database::Utils";
$p =~ s{::}{/}g;
$p .= ".pm";
print "$INC{$p}\n";
}
perldoc -l Foo::Bar
能够工作,那么perldoc -m Foo::Bar
也能够工作。 - mobperldoc -[lm]
添加到答案中。 - kbaperldoc -m
是什么意思? - CJ7perldoc -m
命令会输出模块的内容,包括 Perl 代码和 POD。 - kba