我如何知道Perl分发了哪些模块?
我的第一个猜测是这里列出的核心模块总是包含在内,但我无法明确地说明这一点.但是,我已经使用了这个集合之外的模块(例如LWP),而无需在Mac OS X和Linux上安装它们.
所以要稍微改进我的问题:
所有Perl安装都分发了哪些模块?
并且:我如何找出已分发的模块:
Linux(尤其是Debian/Ubuntu)?
Mac OS X?
的Solaris?
在每种情况下,我使用的是最新版操作系统标准的Perl版本.
TIA.
更新:问题的原因是我在Mac OS X和Linux上开发用于部署到不同的Linux和Solaris,我没有root用于某些系统,而在Mac OS XI的情况下则没有甚至有一个编译器AFAIK.所以我想知道在没有进一步安装的情况下我在所有四个部署中可用的模块.
如果您安装Module :: CoreList,命令行程序corelist
可以在不同版本的perl中告诉您有关模块及其版本的所有信息.您链接的页面概述了最新版本的perl.
请注意,默认情况下,发行版通常提供比此列表更多的内容,但可以假定此列表在任何位置都存在(除非它明确是与操作系统相关的模块,如Win32).
已经给出了正确的直接答案,但我认为你提出了错误的问题.您可能正在尝试仅使用核心模块进行开发.为什么?您可能正在这样做,因为您不想处理依赖项.为什么?因为他们可能是痛苦的屁股.但是开发没有CPAN的 Perl 却失去了一半的功率.你是在削弱自己.这很值得.
更新:现在我了解了您正在尝试做的事情,我可以回答正确的问题.首先是"如果我没有root,我该如何安装模块?" 简单的答案是这样的:
perl Makefile.PL PREFIX=/some/path LIB=/some/path/lib ...and all the rest as normal...
对于基于MakeMaker的模块(LIB用于控制PREFIX的其他不精确的特性.首选INSTALL_BASE,但它不向后兼容).
这适用于Module :: Build
perl Build.PL --install_base=/some/path
然后模块将在/ some/path/lib中结束,您可以设置PERL5LIB
环境变量或use lib qw(/some/path/lib)
在代码中.
这意味着您可以将相关模块直接粘贴到软件分发中并运送它们.适用于纯Perl模块.对于需要编译器的东西,请查看PAR,因为其他人建议能够发送已编译的可执行文件.
或者,您可以将您的资料分发为CPAN模块,并附上拼写的依赖项,并让CPAN客户端解决它们.您甚至可以使用Module :: AutoInstall在CPAN客户端之外执行此过程.
所以你看,在发布Perl应用程序时,你不仅限于使用核心模块.
Module :: CoreList已被提及.它带有一个命令行界面,使事情变得简单.如果你已经安装它,或者有一个程序需要弄清楚特定版本的Perl可能没有的东西,那就太好了.
如果您想知道特定版本的perl附带了哪些模块,可以perldoc perlmodlib
在命令行上运行以获取完整列表.对于较旧或较新版本的Perl,您只需转到CPAN上的Perl页面并从下拉列表中选择所需的版本(例如,5.6.2),然后导航到perlmodlib
文档中的页面.(输入perlmodlib
浏览器的文本搜索会有所帮助).
如果您考虑不使用模块,因为它不是旧版本Perl的核心,那么您可能希望考虑使用PAR(Perl Archiver)捆绑您的额外依赖项,甚至是Perl本身!Perl Training Australia还有一个使用PAR的Perl提示,涵盖PAR入门的基础知识.
一切都很好,
保罗
要快速查看已安装的模块和版本,请使用cpan工具创建自动提示:
cpan -a
如果您需要更复杂的东西,ExtUtils :: Installed可以帮助您.
曾经有过"标准库"的想法,但它实际上并不存在.Module :: CoreList告诉您"标准库"中的内容,但许多供应商安装了其他模块,有些甚至删除或更新了模块.此外,Strawberry Perl和ActivePerl等发行版还附带许多奖励模块.
此外,您不需要root来安装模块.您只需要root来安装root可以安装模块的模块.perlfaq8为您提供了在任何地方安装模块的所有详细信息.我建议您在分布式@INC目录之外安装所有模块,以便保持分布式Perl的清洁.
祝好运,