我是面向对象编程的新手,CPAN.pm上的perldoc页面让我感到困惑。我的程序需要下载几个模块(如果它们尚不存在)。这基本上只是:
CPAN::Shell->install("Module::Name::Here");
还是还有更多吗?是下载软件包,解压缩并安装它,还是仅仅执行其中一个或两个步骤?如果不是全部三个,我该如何做另一个(或两个)?我希望它确保它不会尝试重新安装任何东西,如果包已经存在 - 这是该函数的默认行为还是没有?
如何判断Perl是否无法连接到CPAN以获取程序包?
答案 0 :(得分:7)
没有其他人提及它,但您必须首先加载CPAN配置:
use CPAN;
CPAN::HandleConfig->load;
CPAN::Shell::setup_output;
CPAN::Index->reload;
# now do your stuff
您还可以查看CPAN.pm附带的cpan(1)脚本,以查看许多程序员的界面。我还写了一篇关于最新一期The Perl Review的文章,其中展示了程序员与CPAN.pm接口的例子。
但是,您可能不需要执行任何操作。为什么你的程序自己下载模块?您是否尝试创建具有依赖关系的分发?有更好的方法来处理它,所以你不必重复已经在其他工具中完成的工作。例如,请参阅我的文章Creating Perl Application Distributions。您将程序看作是一个模块,并获得所有酷模块工具的好处,因此您无需重新发明内容。
如果您告诉我们更多关于您实际尝试解决的问题,我们也可能有其他好的答案。 :) 祝你好运,
答案 1 :(得分:6)
CPAN.pm上的perldoc页面让我感到困惑。
是的,CPAN API的文档仍然有点缺乏。并非每个人都为其他人的程序化使用而设计。如果你可以使用CPANPLUS,你可能会有更好的运气。
我的程序需要下载几个模块(如果它们尚不存在)。这基本上只是:CPAN :: Shell-> install(“Module :: Name :: Here”);
是的,这几乎是最简单的事情。事实上,当你输入“cpan Module :: Name :: Here”时,几乎所有'cpan'命令行程序都会这样做。但是,您需要事先配置CPAN.pm。
下载软件包,取消归档并安装吗?
是的,这三个。
我希望确保它不会尝试重新安装任何东西,如果包已经存在 - 这是该函数的默认行为还是没有?
是的,如果模块是最新的,默认行为是不安装任何东西。您可以使用“uptodate()”方法检查自己:
my $mod = CPAN::Shell->expand("Module", "Module::Name::Here");
$mod->install unless $mod->uptodate;
我怎么知道Perl是否无法连接到CPAN来获取包裹?
以编程方式很难以简单的方式解释。您需要查看输出,或者之后只需检查$ mod-> uptodate;
my $mod = CPAN::Shell->expand("Module", "Module::Name::Here");
if ( ! $mod->uptodate ) {
$mod->install;
die "Problems installing" unless $mod->uptodate;
}
祝你好运!
答案 2 :(得分:1)
基本上使用CPAN如下:
perl -MCPAN -e shell
如果这是您第一次运行它,它会询问您几个问题并将结果保存在配置文件中。
然后安装PGP :: Sign只需输入:
install PGP::Sign
然后你就定了。
关于你的上一个问题,不要担心,它会告诉你它是否可以连接。
答案 3 :(得分:1)
我过去曾尝试使用CPAN模块进行编程(相对较远的过去 - 比如5年前)没有太大的成功,所以我不再尝试了。当然,这意味着事情可能已经发生了变化。但是,CPAN这里的文档应该有所帮助。看起来很有希望的CPAN::API::HOWTO只有两个食谱,它们都与你的问题无关。您可能还会调查CPANPLUS是否更好 - 我以交互方式使用它的频率远远超过CPAN。两者都是令人难以置信的模块。
所以,正如@Keltia建议的那样,我会以交互方式进行CPAN(CPANPLUS)。
答案 4 :(得分:1)
正如您所知,我们大多数人只在交互模式下使用CPAN.pm,但是,您走在正确的轨道上。
我现在可以指出的事情:
答案 5 :(得分:-2)
如果您使用的是Windows,最好的办法是使用PPM,但它的存储库大多数时候已经过时了。