使用cpanm安装Perl模块

Fra*_*ank 5 cpan perl-module cpanm

也许这是一个愚蠢的问题?如果我安装一个像File使用的模块

cpanm File
Run Code Online (Sandbox Code Playgroud)

将它安装下的一切File,喜欢File:Listing等?

Bor*_*din 5

这不是一个愚蠢的问题,我可以理解你为什么不想尝试它.

但你可以继续做下去

cpanm File
Run Code Online (Sandbox Code Playgroud)

并且很少会发生,因为没有一个模块被称为File.

CPAN上的模块按分发组织.单个分发可以包含一个或多个相关模块,因此cpanm首先检查哪个分发包含您要求的模块并获取它.

检查该分布的依赖性,如果有任何已经过时或根本没有安装,那么它将依次获取并安装每个分发.最终要么解决所有依赖关系,要么会出现一个停止cpanm继续进行的严重错误.

安装所有依赖项后,可以解压缩并安装包含模块的分发.

一切都很好,这是事情的结束,所以简而言之

cpanm File
Run Code Online (Sandbox Code Playgroud)

什么都不会安装,因为没有File模块.

cpanm File:Listing
Run Code Online (Sandbox Code Playgroud)

将安装包含的分发,File::Listing在撰写本文时GAAS/File-Listing-6.04.tar.gz

该分发也恰好包含这些模块

File::Listing::apache
File::Listing::dosftp
File::Listing::netware
File::Listing::unix
File::Listing::vms
Run Code Online (Sandbox Code Playgroud)

因此,cpanm首先要确保所有这些模块的依赖关系都得到满足,并在相同的基础上递归递归.


请注意,尝试使用cpan具有更全面命令集的命令可能很有用.最重要的是,它将按名称或正则表达式列出模块,发行版,作者和包.

输入cpan并获取提示

cpan>
Run Code Online (Sandbox Code Playgroud)

什么时候可以要求

cpan> help
Run Code Online (Sandbox Code Playgroud)

它将列出可用命令的摘要.例如,我可以检查File::Listing模块

cpan> m File::Listing
Run Code Online (Sandbox Code Playgroud)

看这样的作者,发行版("CPAN_FILE"),版本等

Module id = File::Listing
    CPAN_USERID  GAAS (Gisle Aas <gisle@ActiveState.com>)
    CPAN_VERSION 6.04
    CPAN_FILE    G/GA/GAAS/File-Listing-6.04.tar.gz
    UPLOAD_DATE  2012-02-15
    MANPAGE      File::Listing - parse directory listing
    INST_FILE    C:\Strawberry\perl\vendor\lib\File\Listing.pm
    INST_VERSION 6.04
Run Code Online (Sandbox Code Playgroud)

我也可以使用正则表达式查找具有相似名称的发行版

cpan> d /File-Listing/
Run Code Online (Sandbox Code Playgroud)

看到有两个匹配的发行版

Distribution    GAAS/File-Listing-6.04.tar.gz
Distribution    PLICEASE/File-Listing-Ftpcopy-0.05.tar.gz
2 items found
Run Code Online (Sandbox Code Playgroud)

我可以看看Gisle Aas的File-Listing发行版

cpan> d GAAS/File-Listing-6.04.tar.gz
Run Code Online (Sandbox Code Playgroud)

我被告知该发行版的成员模块("CONTAINSMODS")等等

Distribution id = G/GA/GAAS/File-Listing-6.04.tar.gz
    CPAN_USERID  GAAS (Gisle Aas <gisle@ActiveState.com>)
    CPAN_VERSION 6.04
    CONTAINSMODS File::Listing File::Listing::apache File::Listing::dosftp File::Listing::netware File::Listing::unix File::Listing::vms
    UPLOAD_DATE  2012-02-15
Run Code Online (Sandbox Code Playgroud)

cpanm没有这样的浏览设施,所以我建议你试验一下cpan自己,并使用md命令一段时间,同时使用全名和正则表达式模式.

一旦了解了CPAN存储库的结构,您就会发现cpanm更快,更精确的一般用途.