Answers:
在Unix上:
通常,您在外壳中启动cpan:
# cpan
和类型
install Chocolate::Belgian
或简称:
cpan Chocolate::Belgian
在Windows上:
如果在Windows上使用ActivePerl,则PPM(Perl软件包管理器)具有与CPAN.pm相同的功能。
例:
# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart
请参阅如何安装Perl模块?在CPAN常见问题解答中
许多发行版都将许多perl模块作为软件包提供。
apt-cache search 'perl$'
pacman -Ss '^perl-'
dev-perl
您应该始终喜欢它们,因为您会从自动(安全)更新和删除的便利中受益。使用cpan可能非常棘手工具本身。
对于Gentoo,有一个名为g-cpan的好工具,它可以从CPAN生成/安装模块,并为您创建一个Gentoo软件包(ebuild)。
ppm
使用连字符-
,因为您指定的分布要安装,这是一个很大的诚实。举例来说,如果使用cpan
安装LWP
,LWP::Simple
或LWP::UserAgent
将安装分布libwww-perl
为您服务。大多数分布包含具有等效名称的单个模块,但有几个例外那样
# cpanm Chocolate::Belgian
仅安装东西非常好。它不提供CPAN或CPANPLUS的更复杂的功能,因此只要您知道要安装哪个模块,它就易于使用。如果您还没有cpanminus,只需键入:
# cpan App::cpanminus
安装它。
也可以完全不使用cpan进行安装。基本的引导程序是,
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
有关更多信息,请转到App :: cpanminus页面并查看有关安装的部分。
cpan
安装App::cpanminus
有点奇怪。正常的安装说明涉及一个引导过程,该过程是从cpanmin.us下载其中的一部分,然后使用该过程来安装其余部分。这避免cpan
了(随后)无用.cpan
目录的配置和创建。
cpanminus
终端安装。我发现cpanm
比cpan
它更好,因为它不会在屏幕上显示错误日志,而是将它们存储在临时日志文件中,并在出现错误时提供路径。
我注意到有些人建议在sudo下运行cpan。这曾经是安装到系统目录中所必需的,但是现代版本的CPAN Shell允许您将其配置为仅使用sudo进行安装。这更安全,因为这意味着测试不会以root身份运行。
如果您使用的是旧的CPAN外壳,只需安装新的cpan(“安装CPAN”),然后在重新加载外壳时,它会提示您配置这些新指令。
如今,当我在具有旧CPAN的系统上时,我要做的第一件事就是更新shell并将其设置为执行此操作,以便我可以以普通用户的身份完成大部分cpan工作。
另外,我强烈建议Windows用户调查Strawberry Perl。这是Perl的版本,它随附有预配置的CPAN Shell和编译器。它还包括一些难以编译的Perl模块,这些模块具有外部C库依赖性,尤其是XML :: Parser。这意味着,在安装模块时,您可以与其他Perl用户一起执行相同的操作,而且事情往往“更容易执行”。
install CPAN
来自哪里?$sudo apt-get install cpan
?
App::cpanminus
它是一种乐趣。菲利普·波特(Philip Potter)在这里的回答中建议了这一点,您可以尝试这款Chas。欧文斯回答。
几个人提到了cpan实用程序,但它不仅仅是启动shell。只需为其提供要安装的模块,然后使其工作即可。
$prompt> cpan Foo::Bar
如果不提供任何参数,它将启动CPAN.pm shell。这可以在Unix,Mac上运行,并且在Windows(尤其是Strawberry Perl)上也可以。
您还可以使用cpan工具执行其他几项操作。以下是当前功能的摘要(可能比CPAN.pm和perl随附的功能更新):
-a
Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.
-A module [ module ... ]
Shows the primary maintainers for the specified modules
-C module [ module ... ]
Show the Changes files for the specified modules
-D module [ module ... ]
Show the module details. This prints one line for each out-of-date module (meaning,
modules locally installed but have newer versions on CPAN). Each line has three columns:
module name, local version, and CPAN version.
-L author [ author ... ]
List the modules by the specified authors.
-h
Prints a help message.
-O
Show the out-of-date modules.
-r
Recompiles dynamically loaded modules with CPAN::Shell->recompile.
-v
Print the script version and CPAN.pm version.
另请参阅是,即使您可以使用CPAN。它显示了如何在没有root或sudo访问的情况下使用CPAN。
奥托提出了一个很好的建议。这也适用于Debian以及任何其他Debian衍生产品。缺少的部分是当apt-cache搜索找不到任何东西时该怎么办。
$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update
然后,只要您有一个随机模块,都希望安装:
$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb
这将为您提供一个deb软件包,您可以安装它来获取Some :: Random :: Module。这里最大的好处之一是手册页和示例脚本以及模块本身将被放置在您发行版的选择位置。如果发行版随附某个官方版本的Some :: Random :: Module的较新版本的官方软件包,则在您进行apt-get升级时会自动安装该发行版。
有很多关于的建议CPAN.pm
,这很不错,但是如果您使用的是,Perl 5.10
那么您也可以访问CPANPLUS.pm
其中的类似CPAN.pm
但更好的方法。
当然,它CPAN
仍然适用于仍在使用旧版本Perl的人们。为什么不尝试:
$ cpan CPANPLUS
很多时候,确实发生了cpan install命令失败,并显示诸如 “使测试返回错误状态,如果没有强行就无法安装”的消息
在这种情况下,以下是安装模块的方法:
perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
使用cpan命令作为 cpan Modulename
$ cpan HTML::Parser
要自动安装依赖项,请执行以下操作
$ perl -MCPAN -e shell
cpan[1]> o conf prerequisites_policy follow
cpan[2]> o conf commit
exit
我更喜欢App :: cpanminus,它会自动安装依赖项。做就是了
$ cpanm HTML::Parser
我知道的2种方式:
使用PPM:
在Windows(ActivePerl)中,我使用了ppm
从命令行键入ppm。在ppm提示下...
ppm> install foo
要么
ppm> search foo
获取可用的foo模块列表。类型帮助的所有命令
使用CPAN:
您也可以像这样使用CPAN(* nix系统):
perl -MCPAN -e 'shell'
提示您
cpan>
在提示符下...
cpan> install foo (again to install the foo module)
键入h以获取cpan的命令列表
在Fedora Linux
或上Enterprise Linux
,yum
还跟踪perl库依赖关系。因此,如果perl模块可用,并且某些rpm软件包导出了该依赖关系,它将为您安装正确的软件包。
yum install 'perl(Chocolate::Belgian)'
(很有可能是perl-Chocolate-Belgian软件包,甚至ChocolateFactory软件包)
安全的解决方案
许多答案都提到了该cpan
实用程序的使用(使用CPAN.pm
),但没有一句安全性。默认情况下,CPAN
2.27和更早版本配置urllist
为使用http URL(即http://www.cpan.org/),该URL 允许MITM攻击,因此是不安全的。这就是用于下载CHECKSUMS
文件的方式,因此需要将其更改为安全的URL(例如https://www.cpan.org/)。
因此,在运行cpan并接受默认配置后,您需要MyConfig.pm
按以下方式修改生成的文件(输出完整路径)。更换
'urllist' => [q[http://www.cpan.org/]],
通过
'urllist' => [q[https://www.cpan.org/]],
注意:https还不够;您还需要一个可以信任的网站。因此,如果要选择任意镜子,请小心。
然后,您可以cpan
按通常的方式使用。
我在rt.cpan.org上关于不安全网址的错误报告。
仅cpan Foo::Bar
在shell上执行即可达到目的。
似乎您已经得到了答案,但是我想我会喜欢的。这就是我在Ubuntu(或Debian服务器)上的某些脚本中所做的事情
#!/usr/bin/perl
use warnings;
use strict;
#I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root
$ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';
#Fill this with the perl modules required for your project
my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable);
chomp(my $curl = `which curl`);
if(!$curl){ system('apt-get install curl -y > /dev/null'); }
chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null'));
#installs cpanm if missing
if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); }
#loops through required modules and installs them if missing
foreach my $x (@perl){
eval "use $x";
if($@){
system("cpanm $x");
eval "use $x";
}
}
这对我来说效果很好,也许这里可以使用一些东西。