5

我想知道 CPAN 是否有允许用户搜索 CPAN.org 上所有可用模块的功能。

我可能只是写一些东西来发送获取请求并吐回答案......只是想知道是否已经有一个内置的实用程序......这真的很棒。

我喜欢在 debian 或 ubuntu linux 中,有“apt-cache search”或“aptitude search”这个东西,它可以告诉你哪些软件包已经安装,哪些软件包可能对你的系统可用。如果 perl 模块/CPAN 有这样的东西,那将是一件非常棒的事情。

4

4 回答 4

10

您可以交互地运行 Perl 的 CPAN 模块:

# perl -MCPAN -e shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> i /JSON::XS/
Reading '/home/alt/.cpan/Metadata'
  Database was generated on Wed, 06 Mar 2013 23:07:32 GMT
Module  < Catalyst::Action::Deserialize::JSON::XS (BOBTFISH/Catalyst-Action-REST-1.06.tar.gz)
Module  < Catalyst::Action::Serialize::JSON::XS (BOBTFISH/Catalyst-Action-REST-1.06.tar.gz)
Module  < JSON::XS               (MLEHMANN/JSON-XS-2.33.tar.gz)
Module  < JSON::XS::Boolean      (MLEHMANN/JSON-XS-2.33.tar.gz)
Module  < JSON::XS::VersionOneAndTwo (LBROCARD/JSON-XS-VersionOneAndTwo-0.31.tar.gz)
Module  < Mojo::JSON::XS         (YSYROTA/Mojo-JSON-Any-0.990104.tar.gz)
Module  < Mojo::JSON::XS::_Bool  (VTI/Mojo-JSON-Any-0.990103.tar.gz)
Module  < Sledge::Plugin::JSON::XS (TOKUHIROM/Sledge-Plugin-JSON-XS-0.05.tar.gz)
8 items found
于 2013-03-07T21:41:31.400 回答
2

还有cpan可能在您的路径中的脚本。所以,而不是打字

perl -MCPAN -eshell

你可以输入

cpan

这会让你进入 CPAN shell。

然后,在CPAN>提示符下键入i /ModuleName/以搜索模块。真正好的是让 cpan 脚本处理i /ModuleName/但现在,只有 -L 可用,它列出了特定模块作者的模块。

于 2013-03-07T22:07:47.640 回答
1

就在这里。你试过什么?

这是 CPAN 手册,描述了您可以从命令行执行的所有操作。

具体来说,在交互模式下运行 cpan 后,m Module::Name将搜索一个模块。

于 2013-03-07T21:42:48.750 回答
0

在我看来,进入 cpan shell 并不是真正的“从命令行”。

我需要能够将 cpan 的输出通过管道传输到其他外部命令(grep/awk/sed/etc)

为此,此语法有效

echo 'm /keyword/' | cpan

例子:

-sh-4.2$ echo 'm /SFTP/' | cpan | grep   Recursive
Module  < Net::SFTP::Recursive   (GEOTIGER/Net-SFTP-Recursive-0.12.tar.gz)

or 
-sh-4.2$ echo 'm /SFTP.*Recursive/' | cpan

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> Reading '/home/myuser/.cpan/Metadata'
  Database was generated on Thu, 14 Oct 2021 17:17:03 GMT
Module id = Net::SFTP::Recursive
    CPAN_USERID  GEOTIGER (Geo Tiger <tiger.geo@gmail.com>)
    CPAN_VERSION undef
    CPAN_FILE    G/GE/GEOTIGER/Net-SFTP-Recursive-0.12.tar.gz
    INST_FILE    (not installed)
cpan[2]> Lockfile removed.

当然,创建一个脚本来做到这一点很容易

cat << EOF > cpancmd
#!/bin/ksh
echo "\$*" | cpan
EOF
chmod 755 cpancmd
./cpancmd m /SFTP/ | grep Recursive

或者使用更具体的脚本或别名来定位子命令“i”或“m”等。

于 2021-10-14T22:18:45.313 回答