97

試すことは別として

perldoc <module name>

私の空想を取り入れたり、ファイルシステムを調べたり、ディレクトリを調べたりするCPANモジュールについて、どのモジュールをインストールしたかわかりません。

インストールされているすべての CPAN モジュールの大きなリストを取得する最も簡単な方法は何ですか? コマンドラインまたはその他から。

4

29 に答える 29

71

これは、Perl FAQ で回答されています。この回答は、 ですぐに見つけることができますperldoc -q installed。要するに、このスレッドで以前に取り上げた両方のバリアントを使用するExtUtils::Installedか、使用することに帰着します。File::Find

また、FAQ エントリ「システムにインストールされているモジュールを見つけるにはどうすればよいですか?」を見つけることもできます。perlfaq3 で。perlfaqを見ると、すべての FAQ の回答のリストを見ることができます。

于 2008-09-23T02:58:02.583 に答える
37
perldoc perllocal

編集: CPAN FAQに (少し) 詳細な情報があります

于 2008-09-22T15:17:44.357 に答える
30

perldoc -q installed

それはうまくいくと主張していcpan -lますが、私にとってはうまくいきません。他のオプション:

cpan -a

インストールされたパッケージの素晴らしいリストを吐き出し、それらをファイルに書き込むという素晴らしい副作用があります。

于 2013-03-01T20:32:00.997 に答える
24

perldoc perllocal は、CPAN 経由でインストールされたモジュールについてのみ報告することに注意してください。誰かがモジュールを手動でインストールしても、それらは見つかりません。また、複数の人がモジュールをインストールしていて、perllocal.pod がソース管理下にある場合、人々が競合を誤って解決し、リストを破損する可能性があります (たとえば、これは職場で発生しています)。

残念ながら、ソリューションは File::Find などを使用して @INC をウォークスルーしているようです。ただし、これはモジュールを見つけるだけでなく、ディストリビューション内の関連モジュールも見つけます。たとえば、Test::Harness の実際のディストリビューション名に加えて、TAP::Harness および TAP::Parser が報告されます (バージョン 3 以上を使用していると仮定します)。それらをディストリビューション名と一致させ、一致しない名前を破棄する可能性がありますが、ローカルでビルドおよびインストールされたモジュールを破棄する可能性があります。

brian d foy の backpan インデックス作成作業には、.pm ファイルでそれを処理するコードが含まれているはずであり、ディストリビューションを推測しようとしますが、パッケージの内容が必ずしもインストールされているとは限らないため、これでも失敗することがあります (Devel::Cover を参照)。 ::Inc の例)。

于 2008-09-22T16:26:30.463 に答える
23
$ 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"
于 2015-06-05T16:39:13.390 に答える
20

ExtUtils-Installedを試すことができますが、それは s でしか見えない.packlistため、人々が手動で移動したモジュールを見逃す可能性があります@INC

非シェル Web ホスティング アカウントで CGI スクリプトとしてこれを実行したいと考えている友人のために、私はApp-Module-Listerを作成しました。モジュールファイルを取得して、サーバーが CGI スクリプトとして扱うファイル名としてアップロードするだけです。標準ライブラリ以外に依存関係はありません。そのまま使用するか、コードを盗みます。

モジュールとそのバージョンのリストを出力します。

タイ::サイクル 1.15
Tie::IxHash 1.21
タイ::トグル 1.07
Tie::ToObject 0.03
時間::CTime 99.062201
時間::DaysInMonth 99.1117
時間::エポック 0.02
時間::ファジー 0.34
時間::ジュリアン日 2003.1125
時間::パース日付 2006.0814
時間::タイムゾーン 2006.0814

これを機能としてcpanツールに追加するつもりだったので、それも行います。【時が経つ】 そして今、-lスイッチが入ったcpan。リリースする前に他にやるべきことがいくつかありますが、それは github にあります。それを待ちたくない場合は-a、自動バンドルを作成するスイッチを試してみることもできますが、これにより Pod がリストに追加されます。

幸運を;

于 2008-09-22T20:25:09.377 に答える
14

ここにトリックを行うスクリプトがあります:

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
于 2011-04-07T07:27:11.997 に答える
9

これには CPAN 'r' コマンドを使用するのが好きです。古いスタイルで CPAN シェルに入ることができます:

sudo perl -MCPAN -e shell

または、ほとんどの新しいシステムには「cpan」コマンドがあるため、このコマンドでシェルに移動できます。

sudo cpan

(通常、「sudo」を使用してルートとして実行するか、実行する前に「su -」を使用してルートになる必要があります。ただし、通常のユーザーとして実行できるように cpan を設定していない限り、ルートとしてインストールします。このマシンにルートがない場合でも、CPAN シェルを使用してこの情報を見つけることができますが、モジュールをインストールすることはできません。それを実行します。)

次に、cpan シェルに入ったら、「r」コマンドを使用して、インストールされているすべてのモジュールとそのバージョンを報告できます。したがって、「cpan>」プロンプトで「r」と入力します。これにより、インストールされているすべてのモジュールとそのバージョンが一覧表示されます。使用する '?' さらに助けを得るために。

于 2008-09-22T15:34:40.340 に答える
8
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
于 2013-01-30T08:13:34.920 に答える
7

*nix でこれを行うための非常にハックな方法があります。あまり気にしないもの (例: warnings::register など) が表示されますが、次の方法でアクセスできるすべての .pm ファイルのリストが表示されます。パール。


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

于 2008-09-22T16:08:06.827 に答える
7

ターミナルでコマンドを使用して、システムにインストールされている perl モジュールのリストを取得できますinstmodsh。出力を強化するために、次の 3 つのオプションを尋ねられます。

   l            - List all installed modules
   m <module>   - Select a module
   q            - Quit the program
于 2013-11-14T11:52:19.253 に答える
5

次のコマンドを試してください

instmodsh

于 2013-01-30T06:59:23.747 に答える
2

man perllocalまたはを試してくださいperldoc perllocal

于 2009-06-01T10:28:36.650 に答える
2

答えはPerl FAQ listにあります。

Perl に付属している優れたドキュメントに目を通してください。

perldoc perltoc
于 2009-05-31T02:00:12.520 に答える
1

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で指定)を、表示された回数ではなく、キーの値として保存するように適合させることができます。

于 2008-09-22T21:31:09.530 に答える
1

インストールされているすべての .pm ファイルを一覧表示する別のコマンドライン ツールを次に示します。

正規表現に一致するインストール済みの Perl モジュールを見つける

  • ポータブル (コアモジュールのみを使用)
  • ルックアップを高速化するためのキャッシュ オプション
  • 構成可能な表示オプション
于 2009-11-14T03:02:45.683 に答える
1

昨日、まさにこれを行うための perl スクリプトを書きました。このスクリプトは、区切り記号として「::」を使用して、@INC にインストールされた perl モジュールのリストを返します。- を使用してスクリプトを呼び出します。

perl perlmod.pl

また

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

ソフトリンクの再帰に問題があったため、スクリプトは現在のディレクトリ('.')をスキップしますが、17行目のgrep関数を次のように変更することで含めることができます。

  grep { $_ !~ '^\.$' } @INC

ただ、

@INC

スクリプトはここにあります。

于 2009-05-31T03:49:32.753 に答える
0
cd /the/lib/dir/of/your/perl/installation
perldoc $(find . -name perllocal.pod)

Windows ユーザーは、Windows エクスプローラーで検索して見つけるだけです。

于 2014-02-20T20:19:57.367 に答える
0

Perlクックブックには、あなたが望むことをするスクリプト「pmdesc」のいくつかの反復が含まれています。「Perl Cookbook pmdesc」を Google で検索すると、他の Q&A サイトの記事、ネット上のいくつかのコード リスト、解決策の議論、さらにはいくつかの改良点が見つかります。

于 2011-05-26T22:42:14.010 に答える
0

以下は、インストールされているモジュールのリストを出力する Perl のワンライナーです。

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

Data::Dumper がインストールされていることを確認してください。

于 2011-08-18T19:18:07.453 に答える
-3

これが私が行うことです。perl -M{cpan_module}
エラーが表示されない場合は、モジュールがインストールされている可能性が高くなります。

于 2013-04-23T14:57:06.313 に答える