获取 CPAN 中可用包名称的完整列表的最简单方法?

Simplest way to get a comprehensive listing of package names available in CPAN?

假设,作为一个私人项目,我实现了一个 Perl 包,并通过正式和广泛的日常使用对其进行了测试。我发现这个包非常有用并且足够可靠,可以保证将它提交给 CPAN。

至此,由于包是私有项目,我并没有太在意包名,但现在要提交给CPAN,但是,我希望包名适合完全符合 CPAN 中已有的包名生态。

为了找到适合我的包的"CPAN name",我必须检查所有这些包名称的综合列表1

What is the simplest way to get this comprehensive listing of names of packages in CPAN?


ObPedantry

(IOW,如果上面的问题对你来说已经足够清楚了,你可以安全地忽略下面的内容。)

我认为我无法对 "package name" 的意思给出技术上正确的正式定义,所以让我至少给出一个 "operational definition".

如果单行

$ perl -MFoo::Bar::Baz -c -e 1

失败并出现以

开头的错误
Can't locate Foo/Bar/Baz.pm in @INC ...

...,但是在从 CPAN 安装了一些发行版之后,同一个 oneliner 成功了

-e syntax OK

...那么我会说 "Foo::Bar::Baz 是 CPAN 中的包名".

(我们可以在 package/module 区别上分心,并考虑区别重要的场景,但请不要这样。)

此外,如果在查看这个问题的列表后我发现,一方面,CPAN 中实际上有许多以前缀 Foo::Bar:: 开头的显着包名称,另一方面, 有 none (或者很少)以前缀 Fubar:: 开头,那么这就是我将 Fubar::Frobozz 包的名称更改为 [=17] 的充分理由=] 在提交给 CPAN 之前。


1 当然,在检查了这样一个列表之后,我可能会发现我的包没有添加足够的新功能,相对于 CPAN 中已经可用的功能毕竟保证将我的包裹提交给 CPAN。

PAUSE::Packages can do what you want, however you probably want to use this list, but http://prepan.org/ can provide advice/review before submission to cpan, with of course reading on the naming of modules 先.

你确定那是你想要的东西吗?在撰写本文时,CPAN 上有 33,623 发行版 。在cpan内你可以输入

cpan> d /./

这是 发行版 d 后跟与您感兴趣的名称相匹配的正则表达式模式

如果您真的对感兴趣——并且一个发行版可能包含多个包名称——您需要

cpan> m/./

其中 m 用于 模块 。其中有 163,136 个,这意味着每个发行版平均有四到五个包,生成列表需要 cpan 几分钟。 (抱歉,我没有监测到具体时间。)

如果您之前有运行 cpan,您已经在<cpan-home>/sources/modules/02packages.details.txt.gz.

下下载了完整的软件包和分发列表

任何 CPAN 镜像上都有新的副本,例如 http://www.cpan.org/modules/02packages.details.txt.gz.

你可以使用 MetaCPAN::Client

我发现了这个 article 它给出了使用这个模块的想法。

#!/usr/bin/perl 
use strict; use warnings; use MetaCPAN::Client;
my $mcpan  = MetaCPAN::Client->new();
my $release_results = $mcpan->release({ status => 'latest' } );
while ( my $release = $release_results->next ) {
    printf "%s v%s\n", $release->distribution, $release->version;
}

目前这给了我 32601 这样的结果:

Proc-tored v0.11
Locale-Utils-PlaceholderBabelFish v0.004
Perinci-To-Doc v0.83
Mojolicious-Plugin-Qooxdoo v0.905
App-cdnget v0.05
Baal-Parser v0.01
Acme-DoOrDie v0.001
Net-Shadowsocks v0.9.0
MetaCPAN-Client v2.006000

此模块还提供有关 版本、模块、作者和文件的信息 并使用 Elasticsearch

它也会在每次 MetaCPAN API 更改时定期更新。