如何获取已安装的 CPAN 模块的列表?

发布于 2024-07-22 06:42:17 字数 170 浏览 5 评论 0原文

除了

perldoc <module name>

单独尝试我喜欢的任何 CPAN 模块或浏览文件系统并查看目录之外,我不知道我们安装了哪些模块。

获取已安装的每个 CPAN 模块的大列表的最简单方法是什么? 从命令行或其他方式。

Aside from trying

perldoc <module name>

individually for any CPAN module that takes my fancy or going through the file system and looking at the directories, I have no idea what modules we have installed.

What's the easiest way to just get a big list of every CPAN module installed? From the command line or otherwise.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(28

夜巴黎 2024-07-29 06:42:17

这个问题在 Perl FAQ 中得到了解答,可以通过安装perldoc -q来快速找到答案。 简而言之,归结为使用 ExtUtils::Installed 或使用 File::Find,这两种方法的变体已在本线程之前介绍过。

您还可以找到常见问题解答条目 “如何查找我的系统上安装了哪些模块?”。 您可以通过查看 perlfaq 来查看所有常见问题解答的列表

This is answered in the Perl FAQ, the answer which can be quickly found with perldoc -q installed. In short, it comes down to using ExtUtils::Installed or using File::Find, variants of both of which have been covered previously in this thread.

You can also find the FAQ entry "How do I find which modules are installed on my system?" in perlfaq3. You can see a list of all FAQ answers by looking in perlfaq

短叹 2024-07-29 06:42:17
perldoc perllocal

编辑:CPAN 常见问题解答中提供了有关它的(一点)更多信息

perldoc perllocal

Edit: There's a (little) more info about it in the CPAN FAQ

森林散布 2024-07-29 06:42:17

perldoc -q displayed

声称 cpan -l 可以解决问题,但它对我不起作用。 另一个选项:

cpan -a

确实会输出已安装软件包的良好列表,并且具有将它们写入文件的良好副作用。

perldoc -q installed

claims that cpan -l will do the trick, however it's not working for me. The other option:

cpan -a

does spit out a nice list of installed packages and has the nice side effect of writing them to a file.

绝情姑娘 2024-07-29 06:42:17
$ for M in `perldoc -t perllocal|grep Module |sed -e 's/^.*" //'`; do V=`perldoc -t perllocal|awk "/$M/{y=1;next}y" |grep VERSION |head -n 1`; printf "%30s %s\n" "$M" "$V"; done |sort
              Class::Inspector     *   "VERSION: 1.28"
                    Crypt::CBC     *   "VERSION: 2.33"
               Crypt::Rijndael     *   "VERSION: 1.11"
                    Data::Dump     *   "VERSION: 1.22"
                   DBD::Oracle     *   "VERSION: 1.68"
                           DBI     *   "VERSION: 1.630"
                   Digest::SHA     *   "VERSION: 5.92"
           ExtUtils::MakeMaker     *   "VERSION: 6.84"
                       install     *   "VERSION: 6.84"
               IO::SessionData     *   "VERSION: 1.03"
               IO::Socket::SSL     *   "VERSION: 2.016"
                          JSON     *   "VERSION: 2.90"
                  MIME::Base64     *   "VERSION: 3.14"
                  MIME::Base64     *   "VERSION: 3.14"
                   Mozilla::CA     *   "VERSION: 20141217"
                   Net::SSLeay     *   "VERSION: 1.68"
                        parent     *   "VERSION: 0.228"
                  REST::Client     *   "VERSION: 271"
                    SOAP::Lite     *   "VERSION: 1.08"
                  Task::Weaken     *   "VERSION: 1.04"
                 Term::ReadKey     *   "VERSION: 2.31"
                Test::Manifest     *   "VERSION: 1.23"
                  Test::Simple     *   "VERSION: 1.001002"
                  Text::CSV_XS     *   "VERSION: 1.16"
                     Try::Tiny     *   "VERSION: 0.22"
                   XML::LibXML     *   "VERSION: 2.0108"
         XML::NamespaceSupport     *   "VERSION: 1.11"
                XML::SAX::Base     *   "VERSION: 1.08"
$ for M in `perldoc -t perllocal|grep Module |sed -e 's/^.*" //'`; do V=`perldoc -t perllocal|awk "/$M/{y=1;next}y" |grep VERSION |head -n 1`; printf "%30s %s\n" "$M" "$V"; done |sort
              Class::Inspector     *   "VERSION: 1.28"
                    Crypt::CBC     *   "VERSION: 2.33"
               Crypt::Rijndael     *   "VERSION: 1.11"
                    Data::Dump     *   "VERSION: 1.22"
                   DBD::Oracle     *   "VERSION: 1.68"
                           DBI     *   "VERSION: 1.630"
                   Digest::SHA     *   "VERSION: 5.92"
           ExtUtils::MakeMaker     *   "VERSION: 6.84"
                       install     *   "VERSION: 6.84"
               IO::SessionData     *   "VERSION: 1.03"
               IO::Socket::SSL     *   "VERSION: 2.016"
                          JSON     *   "VERSION: 2.90"
                  MIME::Base64     *   "VERSION: 3.14"
                  MIME::Base64     *   "VERSION: 3.14"
                   Mozilla::CA     *   "VERSION: 20141217"
                   Net::SSLeay     *   "VERSION: 1.68"
                        parent     *   "VERSION: 0.228"
                  REST::Client     *   "VERSION: 271"
                    SOAP::Lite     *   "VERSION: 1.08"
                  Task::Weaken     *   "VERSION: 1.04"
                 Term::ReadKey     *   "VERSION: 2.31"
                Test::Manifest     *   "VERSION: 1.23"
                  Test::Simple     *   "VERSION: 1.001002"
                  Text::CSV_XS     *   "VERSION: 1.16"
                     Try::Tiny     *   "VERSION: 0.22"
                   XML::LibXML     *   "VERSION: 2.0108"
         XML::NamespaceSupport     *   "VERSION: 1.11"
                XML::SAX::Base     *   "VERSION: 1.08"
仅冇旳回忆 2024-07-29 06:42:17

值得注意的是,perldoc perllocal 只会报告通过 CPAN 安装的模块。 如果有人手动安装模块,它将找不到它们。 另外,如果有多人安装模块并且 perllocal.pod 处于源代码控制之下,人们可能会错误地解决冲突并损坏列表(例如,在工作中就发生过这种情况)。

遗憾的是,解决方案似乎是使用 File::Find 或类似的东西遍历@INC。 但是,这不仅可以查找模块,还可以查找发行版中的相关模块。 例如,除了 Test::Harness 的实际发行版名称之外,它还会报告 TAP::Harness 和 TAP::Parser(假设您有版本 3 或更高版本)。 您可以将它们与发行版名称匹配并丢弃那些不匹配的名称,但随后您可能会丢弃本地构建和安装的模块。

我相信 brian d foy 的 backpan 索引工作应该有代码将其交给 .pm 文件,并且它将尝试推断分布,但即使这样有时也会失败,因为包中的内容不一定已安装(请参阅 Devel::Cover ::Inc 为例)。

It's worth noting that perldoc perllocal will only report on modules installed via CPAN. If someone installs modules manually, it won't find them. Also, if you have multiple people installing modules and the perllocal.pod is under source control, people might resolve conflicts incorrectly and corrupt the list (this has happened here at work, for example).

Regrettably, the solution appears to be walking through @INC with File::Find or something similar. However, that doesn't just find the modules, it also finds related modules in a distribution. For example, it would report TAP::Harness and TAP::Parser in addition to the actual distribution name of Test::Harness (assuming you have version 3 or above). You could potentially match them up with distribution names and discard those names which don't match, but then you might be discarding locally built and installed modules.

I believe brian d foy's backpan indexing work is supposed to have code to hand it at .pm file and it will attempt to infer the distribution, but even this fails at times because what's in a package is not necessarily installed (see Devel::Cover::Inc for an example).

梦在夏天 2024-07-29 06:42:17

您可以尝试 ExtUtils-Installed,但这只在 .packlists,因此它可能会丢失人们手动将内容移入 @INC 的模块。

我为一位朋友编写了 App-Module-Lister非 shell Web 托管帐户上的 CGI 脚本。 您只需获取模块文件并将其作为文件名上传,您的服务器会将其视为 CGI 脚本。 它没有标准库之外的依赖项。 按原样使用它或窃取代码。

它输出模块及其版本的列表:

Tie::Cycle      1.15
Tie::IxHash     1.21
Tie::Toggle     1.07
Tie::ToObject   0.03
Time::CTime     99.062201
Time::DaysInMonth       99.1117
Time::Epoch     0.02
Time::Fuzzy     0.34
Time::JulianDay 2003.1125
Time::ParseDate 2006.0814
Time::Timezone  2006.0814

我一直想将其作为一项功能添加到 cpan 工具中,所以我也会这样做。 [时间流逝] 现在,我在 cpan 中有一个 -l 开关。 在发布之前我还有其他一些事情要做,但是它在 github 中< /a>. 如果您不想等待,您可以尝试使用 -a 开关来创建自动捆绑包,尽管这会在列表中放置一些 Pod。

祝你好运;

You can try ExtUtils-Installed, but that only looks in .packlists, so it may miss modules that people moved things into @INC by hand.

I wrote App-Module-Lister for a friend who wanted to do this as a CGI script on a non-shell web hosting account. You simple take the module file and upload it as a filename that your server will treat as a CGI script. It has no dependencies outside of the Standard Library. Use it as is or steal the code.

It outputs a list of the modules and their versions:

Tie::Cycle      1.15
Tie::IxHash     1.21
Tie::Toggle     1.07
Tie::ToObject   0.03
Time::CTime     99.062201
Time::DaysInMonth       99.1117
Time::Epoch     0.02
Time::Fuzzy     0.34
Time::JulianDay 2003.1125
Time::ParseDate 2006.0814
Time::Timezone  2006.0814

I've been meaning to add this as a feature to the cpan tool, so I'll do that too. [Time passes] And, now I have a -l switch in cpan. I have a few other things to do with it before I make a release, but it's in github. If you don't want to wait for that, you could just try the -a switch to create an autobundle, although that puts some Pod around the list.

Good luck;

静若繁花 2024-07-29 06:42:17

这是一个可以解决问题的脚本:

use ExtUtils::Installed;

my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();
foreach $module (@modules){
       print $module ." - ". $inst->version($module). "\n";
}

=head1 ABOUT

This scripts lists installed cpan modules using the ExtUtils modules

=head1 FORMAT

Prints each module in the following format
<name> - <version>

=cut

Here a script which would do the trick:

use ExtUtils::Installed;

my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();
foreach $module (@modules){
       print $module ." - ". $inst->version($module). "\n";
}

=head1 ABOUT

This scripts lists installed cpan modules using the ExtUtils modules

=head1 FORMAT

Prints each module in the following format
<name> - <version>

=cut
生活了然无味 2024-07-29 06:42:17

尝试使用以下命令

instmodsh

l,您将列出所有已安装的模块

来自 手册页

用于检查已安装模块的 shell。
ExtUtils::Installed 的一个小接口,用于检查已安装的模块、验证您的包列表,甚至从已安装的模块创建 tarball。

Try the following command

instmodsh

With l you will List all installed modules.

From man page:

A shell to examine installed modules.
A little interface to ExtUtils::Installed to examine installed modules, validate your packlists and even create a tarball from an installed module.

七七 2024-07-29 06:42:17

您可以通过在终端中使用instmodsh命令来获取系统中安装的perl模块的列表。它会询问您三个选项以增强输出:

   l            - List all installed modules
   m <module>   - Select a module
   q            - Quit the program

You can get list of perl modules installed in you system by using instmodsh command in your terminal.It will ask you three option in order to enhance the output they are:

   l            - List all installed modules
   m <module>   - Select a module
   q            - Quit the program
羁拥 2024-07-29 06:42:17

在 Linux/Unix 上,我使用这个简单的命令:

perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );' 

它扫描 @INC 中的所有文件夹并查找任何 *.pm 文件。

On Linux/Unix I use this simple command:

perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );' 

It scans all folder in @INC and looks for any *.pm file.

‘画卷フ 2024-07-29 06:42:17

我喜欢为此使用 CPAN 'r' 命令。 您可以使用旧样式进入 CPAN shell:

sudo perl -MCPAN -e shell

或者,在大多数较新的系统上,有一个“cpan”命令,因此此命令将带您进入 shell:(

sudo cpan

您通常必须使用“sudo”来运行它root,或在运行之前使用“su -”成为root,除非您已设置cpan以让您以普通用户身份运行它,但如果您在此计算机上没有root,则可以安装。仍然使用 CPAN shell 来查找此信息,但您将无法安装模块,并且第一次运行时可能需要进行一些设置。)

然后,一旦您进入 cpan shell 中,您可以使用“r”命令报告所有已安装的模块及其版本。 所以,在“cpan>”处 提示时,输入“r”。 这将列出所有已安装的模块及其版本。 使用 '?' 以获得更多帮助。

I like to use the CPAN 'r' command for this. You can get into the CPAN shell with the old style:

sudo perl -MCPAN -e shell

or, on most newer systems, there is a 'cpan' command, so this command will get you to the shell:

sudo cpan

(You typically have to use 'sudo' to run it as root, or use 'su -' to become root before you run it, unless you have cpan set up to let you run it as a normal user, but install as root. If you don't have root on this machine, you can still use the CPAN shell to find out this information, but you won't be able to install modules, and you may have to go through a bit of setup the first time you run it.)

Then, once you're in the cpan shell, you can use the 'r' command to report all installed modules and their versions. So, at the "cpan>" prompt, type 'r'. This will list all installed modules and their versions. Use '?' to get some more help.

浮世清欢 2024-07-29 06:42:17
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
世态炎凉 2024-07-29 06:42:17

这是在 *nix 中执行此操作的一种非常 hacky 的方法,您会得到一些您并不真正关心的内容(即:警告::注册等),但它应该为您提供可通过以下方式访问的每个 .pm 文件的列表珀尔。


for my $path (@INC) {
    my @list = `ls -R $path/**/*.pm`;
    for (@list) {
        s/$path\///g;
        s/\//::/g;
        s/\.pm$//g;
        print;
    }
}

Here's a really hacky way to do it in *nix, you'll get some stuff you don't really care about (ie: warnings::register etc), but it should give you a list of every .pm file that's accessible via perl.


for my $path (@INC) {
    my @list = `ls -R $path/**/*.pm`;
    for (@list) {
        s/$path\///g;
        s/\//::/g;
        s/\.pm$//g;
        print;
    }
}

很酷又爱笑 2024-07-29 06:42:17

所有无法安装 perldoc 或其他模块,并想知道哪些模块可用(CPAN 或其他)的人,以下内容适用于 linux 和 Mingw32/64:

grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq

是的,这很混乱。 是的,它报告的内容可能比您想要的更多。 但是如果你将它通过管道传输到一个文件中,你可以轻松地检查,比如说,存在哪些 dbm 接口:

 grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq > modules-installed
 cat modules-installed | grep -i dbm 

AnyDBM_File;
Memoize::AnyDBM_File;
Memoize::NDBM_File;
Memoize::SDBM_File;
WWW::RobotRules::AnyDBM_File;

这就是为什么我最终出现在这个页面上(失望)

(我意识到这并不能完全回答OP的问题,但我我将其发布给所有因与我相同的原因而来到这里的人,这就是堆栈***的问题,即使它存在,也几乎不可能找到您所问的问题,但堆栈***几乎总是存在。谷歌最热门!)

All those who can't install perldoc, or other modules, and want to know what modules are available (CPAN or otherwise), the following works for linux and Mingw32/64:

grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq

Yes, it's messy. Yes, it probably reports more than you want. But if you pipe it into a file, you can easily check for, say, which dbm interfaces are present:

 grep -RhIP '^package [A-Z][\w:]+;' `perl -e 'print join " ",@INC'` | sed 's/package //' | sort | uniq > modules-installed
 cat modules-installed | grep -i dbm 

AnyDBM_File;
Memoize::AnyDBM_File;
Memoize::NDBM_File;
Memoize::SDBM_File;
WWW::RobotRules::AnyDBM_File;

Which is why I ended up on this page (disappointed)

(I realise this doesn't answer the OP's question exactly, but I'm posting it for anybody who ended up here for the same reason I did. That's the problem with stack*** it's almost imposisble to find the question you're asking, even when it exists, yet stack*** is nearly always google's top hit!)

水中月 2024-07-29 06:42:17

这是@JamesThomasMoon1979 重写为一句台词的脚本

perl -MExtUtils::Installed -e '$i=ExtUtils::Installed->new(); 
      print "$_ ".$i->version($_)."\n" for $i->modules();'

Here's a script by @JamesThomasMoon1979 rewritten as a one-liner

perl -MExtUtils::Installed -e '$i=ExtUtils::Installed->new(); 
      print "$_ ".$i->version($_)."\n" for $i->modules();'
柏拉图鍀咏恒 2024-07-29 06:42:17

答案可以在 Perl 常见问题解答列表

您应该浏览 Perl 附带的优秀文档

perldoc perltoc

The answer can be found in the Perl FAQ list.

You should skim the excellent documentation that comes with Perl

perldoc perltoc
荒路情人 2024-07-29 06:42:17

尝试 man perllocalperldoc perllocal

Try man perllocal or perldoc perllocal.

谈场末日恋爱 2024-07-29 06:42:17

我昨天写了一个 perl 脚本来完成这个任务。 该脚本使用“::”作为分隔符返回 @INC 中安装的 perl 模块的列表。 使用 -

perl perlmod.pl

perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)

调用脚本 目前,脚本会跳过当前目录('.'),因为我在递归软链接方面遇到问题,但您可以通过将第 17 行中的 grep 函数从 更改为

  grep { $_ !~ '^\.

just 来包含它,

@INC

该脚本可以可以在此处找到。

} @INC

just 来包含它,

该脚本可以可以在此处找到。

I wrote a perl script just yesterday to do exactly this. The script returns the list of perl modules installed in @INC using the '::' as the separator. Call the script using -

perl perlmod.pl

OR

perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)

As of now the script skips the current directory('.') since I was having problems with recursing soft-links but you can include it by changing the grep function in line 17 from

  grep { $_ !~ '^\.

to just,

@INC

The script can be found here.

} @INC

to just,

The script can be found here.

猫弦 2024-07-29 06:42:17

这是另一个命令行工具,用于列出所有已安装的 .pm 文件:

查找与常规匹配的已安装 Perl 模块表达式

  • 可移植(仅使用核心模块)
  • 用于更快查找的缓存选项
  • 可配置显示选项

Here is yet another command-line tool to list all installed .pm files:

Find installed Perl modules matching a regular expression

  • Portable (only uses core modules)
  • Cache option for faster look-up's
  • Configurable display options
永言不败 2024-07-29 06:42:17

要在不使用像 ls(1) 这样的外部程序的情况下遍历 @INC 目录树,可以使用 File::Find::Rule 模块,该模块具有很好的声明式界面。

另外,您希望过滤掉重复项,以防以前的 Perl 版本包含相同的模块。 执行此操作的代码如下所示:

#! /usr/bin/perl -l

use strict;
use warnings;
use File::Find::Rule;

my %seen;
for my $path (@INC) {
    for my $file (File::Find::Rule->name('*.pm')->in($path)) {
        my $module = substr($file, length($path)+1);
        $module =~ s/.pm$//;
        $module =~ s{[\\/]}{::}g;
        print $module unless $seen{$module}++;
    }
}

在运行结束时,您还将所有模块名称作为 %seen 哈希中的键。 该代码可以修改为将规范文件名(在 $file 中给出)保存为键的值,而不是查看的次数。

To walk through the @INC directory trees without using an external program like ls(1), one could use the File::Find::Rule module, which has a nice declarative interface.

Also, you want to filter out duplicates in case previous Perl versions contain the same modules. The code to do this looks like:

#! /usr/bin/perl -l

use strict;
use warnings;
use File::Find::Rule;

my %seen;
for my $path (@INC) {
    for my $file (File::Find::Rule->name('*.pm')->in($path)) {
        my $module = substr($file, length($path)+1);
        $module =~ s/.pm$//;
        $module =~ s{[\\/]}{::}g;
        print $module unless $seen{$module}++;
    }
}

At the end of the run, you also have all your module names as keys in the %seen hash. The code could be adapted to save the canonical filename (given in $file) as the value of the key instead of a count of times seen.

谁人与我共长歌 2024-07-29 06:42:17

以下内容对我有用。

$ perldoc perllocal | grep Module
$ perldoc perllocal | grep -E 'VERSION|Module'

The following worked for me.

$ perldoc perllocal | grep Module
$ perldoc perllocal | grep -E 'VERSION|Module'
鸩远一方 2024-07-29 06:42:17

Perl 食谱包含脚本“pmdesc”的多次迭代,可以完成您想要的操作。
Google 搜索“Perl Cookbook pmdesc”,您会发现 其他问答网站上的文章、网上的一些代码清单、解决方案的讨论,甚至一些改进

the Perl cookbook contains several iterations of a script "pmdesc" that does what you want.
Google-search for "Perl Cookbook pmdesc" and you'll find articles on other Q&A Sites, several code listings on the net, a discussion of the solution, and even some refinements.

纵情客 2024-07-29 06:42:17

这是一个 Perl 单行代码,它将打印出已安装模块的列表:

perl -MExtUtils::Installed -MData::Dumper -e  'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'

只需确保您已安装 Data::Dumper。

Here's a Perl one-liner that will print out a list of installed modules:

perl -MExtUtils::Installed -MData::Dumper -e  'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'

Just make sure you have Data::Dumper installed.

得不到的就毁灭 2024-07-29 06:42:17
cd /the/lib/dir/of/your/perl/installation
perldoc $(find . -name perllocal.pod)

Windows 用户只需执行 Windows 资源管理器搜索即可找到它。

cd /the/lib/dir/of/your/perl/installation
perldoc $(find . -name perllocal.pod)

Windows users just do a Windows Explorer search to find it.

初见终念 2024-07-29 06:42:17

尝试“perldoc -l”:

$ perldoc -l Log::Dispatch
/usr/local/share/perl/5.26.1/Log/Dispatch.pm

Try "perldoc -l":

$ perldoc -l Log::Dispatch
/usr/local/share/perl/5.26.1/Log/Dispatch.pm

鯉魚旗 2024-07-29 06:42:17

这可能是一种替代且简单的方法:

perldoc perllocal | grep Module | awk '{print $7}' | sort -u

this could be an alternative and easy way:

perldoc perllocal | grep Module | awk '{print $7}' | sort -u
半夏半凉 2024-07-29 06:42:17

当您输入 Perl 脚本时,所有已安装的模块都以 .pm 文件形式保存在 @INC 中的文件夹下,因此一个小的 bash 脚本将为您完成这项工作:

#!/bin/bash

echo -e -n "Content-type: text/plain\n\n"

inc=`perl -e '$, = "\n"; print @INC;'`

for d in $inc
do
   find $d -name '*.pm'
done

As you enter your Perl script you have all the installed modules as .pm files below the folders in @INC so a small bash script will do the job for you:

#!/bin/bash

echo -e -n "Content-type: text/plain\n\n"

inc=`perl -e '$, = "\n"; print @INC;'`

for d in $inc
do
   find $d -name '*.pm'
done
很糊涂小朋友 2024-07-29 06:42:17

对于 Linux,最简单的获取方法是:

dpkg -l | grep "perl"

For Linux the easiest way to get is,

dpkg -l | grep "perl"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文