虽然递归所有@INC
目录会给你“Perl知道的”模块,但找到所有模块的最简洁方法是什么? (Linux)系统?
答案 0 :(得分:3)
这是一个Perl常见问题,即如何找到我的系统上安装的模块?,您可以通过perldoc -q installed
或perldoc perlfaq3
找到此问题的答案然后搜索“已安装”。
以下是对此问题的'perlfaq3.pod'答案的摘要,以及根据我的测试对答案本身的一些注意事项:
在命令行上使用cpan
:
cpan -l
注意:您可能需要安装额外的软件包才能使用此命令,例如,您需要在Fedora 19中安装“perl-CPAN”。
在Perl脚本中使用ExtUtils::Installed
:
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();
注意:这可能无法列出您的包管理系统安装的所有模块。
使用File::Find::Rule
查找所有模块文件:
use File::Find::Rule;
my @files = File::Find::Rule->
extras({follow => 1})->
file()->
name( '*.pm' )->
in( @INC )
;
注意:这不是标准模块,您可能需要先安装它。
使用File::Find
查找所有模块文件:
use File::Find;
my @files;
find(
{
wanted => sub {
push @files, $File::Find::fullname
if -f $File::Find::fullname && /\.pm$/
},
follow => 1,
follow_skip => 2,
},
@INC
);
print join "\n", @files;
如果您知道模块名称并且只想检查它是否存在于您的系统中,您可以使用以下命令:
perldoc Module::Name
或
perl -MModule::Name -e1
以下链接也可能有所帮助: