43
A
回答
66
是的,%INC
包含模块加载的完整路径。
例子:
$ perl -M'Data::Dump qw(pp)' -e 'pp(\%INC)'
{
"Data/Dump.pm" => "/usr/share/perl5/Data/Dump.pm",
"Exporter.pm" => "/usr/share/perl/5.10/Exporter.pm",
"List/Util.pm" => "/usr/lib/perl/5.10/List/Util.pm",
"Scalar/Util.pm" => "/usr/lib/perl/5.10/Scalar/Util.pm",
"XSLoader.pm" => "/usr/lib/perl/5.10/XSLoader.pm",
"overload.pm" => "/usr/share/perl/5.10/overload.pm",
"strict.pm" => "/usr/share/perl/5.10/strict.pm",
"vars.pm" => "/usr/share/perl/5.10/vars.pm",
"warnings.pm" => "/usr/share/perl/5.10/warnings.pm",
"warnings/register.pm" => "/usr/share/perl/5.10/warnings/register.pm",
}
1
从我发现,PERL将查找路径内的目录:
perl -le 'print foreach @INC'
然后,它会看在标准库,然后在当前目录中。
这给你一个搜索顺序。
我来源:
3
有相当数量的CPAN模块找到这个信息的,最有可能的候选人看起来是模块::查找,模块::其中,和模块: :定位。我可能会用模块去::定位:
use strict;
use warnings;
use Module::Locate qw/locate/;
my $to_find = "Some::Module";
print "Perl would use: ", scalar locate($to_find), "\n";
在列表上下文中找到返回一些::模块的所有副本发现基于@INC秩序。
编辑: derobert suggests a much better way,哪知%INC已经办完了...这是一个基于模块的解决方案仍然是有用的,如果你想加载它打算从加载的模块之前就知道了。
0
Module::Mapper提供一种方式来走@INC树查找模块:
perl -MModule::Mapper -MData::Dumper \
-e 'print Dumper(find_sources(UseINC => 1, Modules => [ @ARGV ]))' \
list-of-modules-to-locate
5
要在%INC
变量,它记录它加载的文件名查找您加载的库为do
,require
或use
。有关详细信息,请参阅perlvar。
7
如果模块POD文档,如果你能保证在路径中的perldoc实用工具属于运行脚本相同的Perl,那么这个命令会经常给你的实际文件被人发现:
perldoc -l ModuleName
3
这里是一个一行(有一个bash包装),以确定是否安装一个模块 - 以及它会从被加载:
:#!/bin/bash
perl -M${1} -le "\$mname=\"${1}.pm\";\$mname=~s#::#/#g;print \"$1 INSTALLED AT \$INC{\$mname}\";" 2>/dev/null || echo "${1} NOT INSTALLED"
Perl的模块名语法调用它
./find_perl_module Font::Metrics::Courier
6
perl -M'LWP'-e'use Data :: Dumper;打印Dumper \%INC'| grep LWP
这将列出磁盘上的LWP模块位置,并列出LWP内部加载的模块。
'LWP.pm' => '/usr/lib/perl5/5.10.0/LWP.pm',
'LWP/Protocol.pm' => '/usr/lib/perl5/5.10.0/LWP/Protocol.pm',
'LWP/UserAgent.pm' => '/usr/lib/perl5/5.10.0/LWP/UserAgent.pm',
0
您可以使用instmodsh命令:http://perldoc.perl.org/instmodsh.html。
0
我使用shell脚本在/ usr/local/bin目录/ which_perl_module
#!/bin/sh
if [ ! $1 ];then echo "Which perl module should I look for?"; exit; fi
echo -n "You are using: "
perldoc -l $1
echo "which I found by looking in:"
perl -MData::Dump=pp -e 'unshift @INC, '$1'; pp(\@INC)'
相关问题
- 1. 在加载时查找Perl模块的路径
- 2. 如何使用XSLoader查找Perl模块的源代码?
- 3. 如何查找Perl脚本使用的所有模块?
- 4. 如何使用模块加载插件
- 5. 如何卸载Perl模块?
- 6. 动态加载Perl模块
- 7. 如何使用perl模块?
- 8. Perl:仅查找“纯perl”模块
- 9. 如何在运行时加载Perl模块?
- 10. 如何在Perl中在运行时加载模块?
- 11. 使用模块名称加载模块而不是文件名
- 12. 的PostgreSQL无法加载的perl模块
- 13. 如何使用Perl中的Graph :: easy模块处理XML文件
- 14. 如何使用Java加载模块
- 15. 如何使用Ajax加载模块Joomla
- 16. 如何使用Python中的Perl模块?
- 17. 如何使用Perl模块包含数据文件?
- 18. 如何使用getCodeBase()在Java Applet中查找并加载文件?
- 19. 如何使用Perl下载文件?
- 20. 如何查找Perl脚本中使用的所有模块并安装它们?
- 21. 下载的Perl模块
- 22. 如何找到Clojure加载文件使用的文件名?
- 23. 如何从IIS6中的相对路径加载Perl模块?
- 24. 使用perl查找AIFF音频文件的运行时间
- 25. 模块加载英特尔(错误:105:无法找到'intel'的模块文件)
- 26. 使用Lab.js加载模块
- 27. 加载并使用perl模块而不知道模块名称,但知道文件名
- 28. 如何根据条件加载模块?
- 29. 如何加载mongojs模块
- 30. 如何加载角模块
你学到新的东西每天。 – 2008-12-04 19:46:00