我是面向对象编程的新手,CPAN.pm上的perldoc页面让我感到困惑.我的程序需要下载几个模块(如果它们尚不存在).这基本上只是:
CPAN::Shell->install("Module::Name::Here");
或者还有更多吗?是下载软件包,解压缩并安装它,还是仅仅执行其中一个或两个步骤?如果不是全部三个,我该如何做另一个(或两个)?我希望它确保它不会尝试重新安装任何东西,如果包已经存在 - 这是该函数的默认行为还是没有?
如何判断Perl是否无法连接到CPAN以获取包?
没有人提到它,但你必须先加载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; }
祝你好运!