繁体   English   中英

如何使用 CPAN.pm 下载其他 Perl 模块?

[英]How do I use CPAN.pm to download other Perl modules?

我是面向对象编程的新手,CPAN.pm 上的 perldoc 页面让我很困惑。 如果它们尚不存在,我的程序需要下载几个模块。 这基本上只是:

CPAN::Shell->install("Module::Name::Here");

或者还有更多吗? 那是下载 package、解压缩并安装它,还是只是其中的一两个步骤? 如果不是全部三个,我该怎么做另一个(或两个)? 如果 package 已经存在,我希望它确保它不会尝试重新安装任何东西 - 这是 function 的默认行为还是否?

我如何判断 Perl 是否无法连接到 CPAN 以获取 package?

没有人提到它,但你必须先加载CPAN配置:

use CPAN;

CPAN::HandleConfig->load;
CPAN::Shell::setup_output;
CPAN::Index->reload;

# now do your stuff

您还可以查看CPAN.pm附带的cpan(1)脚本,以查看许多程序员的界面。 我还写了最新一期Perl Review的文章,其中展示了CPAN.pm的程序员界面示例。

但是,您可能不需要执行任何操作。 为什么你的程序自己下载模块? 您是否尝试创建具有依赖关系的分发? 有更好的方法来处理它,所以你不必重复已经在其他工具中完成的工作。 例如,请参阅我的文章Creating Perl Application Distributions 您将程序看作是一个模块,并获得所有酷模块工具的好处,因此您不必重新发明一些东西。

如果你告诉我们更多你正在尝试解决的问题,我们也可能有其他好的答案。 :) 祝好运,

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;
}

祝你好运!

基本上使用CPAN如下:

perl -MCPAN -e shell

如果这是您第一次运行它,它会询问您几个问题并将结果保存在配置文件中。

然后安装PGP :: Sign只需输入:

install PGP::Sign

而且你已经定下来了。

至于你的最后一个问题,不要担心,它会告诉你它是否可以连接。

我过去曾尝试用CPAN模块进行编程(相对较远的过去 - 比如5年前)没有太大成功,所以我不再尝试了。 当然,这意味着事情可能已经发生了变化。 但是,这里的CPAN文档应该有所帮助。 看起来很有前途的CPAN :: API :: HOWTO只有两个配方,它们都与你的问题无关。 您可能还会调查CPANPLUS是否更好 - 我以交互方式使用它的频率远远超过CPAN。 两者都是令人难以置信的模块。

因此,正如@Keltia建议的那样,我以交互方式进行CPAN(CPANPLUS)。

正如您所知,我们大多数人只在交互模式下使用CPAN.pm,但是,您处于正确的轨道上。

我现在可以指出的事情:

  • 是的,调用CPAN :: Shell-> install()将下载,编译,测试和安装包。 对于包具有的任何依赖项,它也应该以递归方式执行相同的操作。
  • 默认行为是不安装已安装的任何内容(除非有更新的版本可用)。
  • 我不是很确定错误处理是如何工作的 - 我会调查它,并报告回来。
  • 但它可能会提示您的用户。

凯莉亚说得对。 我将补充说,他的第一条指令是从命令提示符完成的,通常以root身份完成,但不一定如此。 第二个命令是从CPAN提示符完成的。 您也可以在命令行上完成所有操作,但我通常不这样做。

如果您正在使用Windows,最好的办法是使用PPM,但其存储库大多数时候都已经过时了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM