試してみる以外に
perldoc <module name>
個別に、またはファイルシステムを調べてディレクトリを確認するCPANモジュールについては、どのモジュールをインストールしたかわかりません。
インストールされているすべてのCPANモジュールの大きなリストを取得する最も簡単な方法は何ですか?コマンドラインまたはその他から。
試してみる以外に
perldoc <module name>
個別に、またはファイルシステムを調べてディレクトリを確認するCPANモジュールについては、どのモジュールをインストールしたかわかりません。
インストールされているすべてのCPANモジュールの大きなリストを取得する最も簡単な方法は何ですか?コマンドラインまたはその他から。
cpan -l
は窓の上で自分自身に役立つことがわかりました。
instmodsh
回答:
これは、Perl FAQで回答されていperldoc -q installed
ます。この回答は、ですばやく見つけることができます。要するに、それは、このスレッドで以前にカバーされた両方のバリアントを使用ExtUtils::Installed
または使用File::Find
することになります。
また、FAQエントリ「システムにインストールされているモジュールを見つけるにはどうすればよいですか?」もあります。perlfaq3で。perlfaqを調べると、すべてのFAQ回答のリストを確認できます。
ExtUtils::Installed
コンストラクターのskip_cwd
オプションを渡す方法はありますか?
cpan -l
が、それはRHEL6では機能せず/usr/bin/cpan -l
、エラーをスローしますUnknown option: l
。
perldoc perllocal
編集:CPAN FAQにそれについての(少し)より多くの情報があります
perldoc -q installed
cpan -l
トリックを行うと主張しますが、それは私にとってはうまくいきません。他のオプション:
cpan -a
インストールされているパッケージの素晴らしいリストを吐き出し、それらをファイルに書き込むという素晴らしい副作用があります。
cpan -l
動作します(またはCPAN v2.05で動作します)。cpan -a
確かにきれいです。
perldoc perllocalは、CPANを介してインストールされたモジュールについてのみレポートすることに注意してください。誰かがモジュールを手動でインストールした場合、それらは見つかりません。また、複数の人がモジュールをインストールしていて、perllocal.podがソース管理下にある場合、人が競合を誤って解決し、リストを破損する可能性があります(これは、たとえば、ここで発生しています)。
残念ながら、解決策はFile :: Findまたは同様のものを使用して@INCをウォークスルーしているようです。ただし、これはモジュールを見つけるだけでなく、ディストリビューション内の関連モジュールも見つけます。たとえば、Test :: Harnessの実際の配布名に加えて、TAP :: HarnessとTAP :: Parserが報告されます(バージョン3以降を使用している場合)。それらをディストリビューション名と一致させ、一致しない名前を破棄する可能性がありますが、ローカルで構築およびインストールされたモジュールを破棄する可能性があります。
brian d foyのバックパンインデックス作成作業には、.pmファイルでそれを渡すコードが含まれているはずであり、ディストリビューションを推測しようとしますが、パッケージに含まれているものが必ずしもインストールされていないため、これでも失敗することがあります(Devel :: Coverを参照)。 :: Inc)。
$ 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"
No documentation found for "perllocal".
ExtUtils-Installedを試すことができますが.packlist
、それはsでしか見えないため、人々が物を移動したモジュールを見逃す可能性があります@INC
手で。
私が書いたのApp-モジュール-リスターを非シェルのWebホスティングアカウントのCGIスクリプトとしてこれをやってみたかった友人のために。モジュールファイルを取得して、サーバーがCGIスクリプトとして扱うファイル名としてアップロードするだけです。標準ライブラリ以外の依存関係はありません。そのまま使用するか、コードを盗んでください。
モジュールとそのバージョンのリストを出力します。
Tie ::サイクル1.15 Tie :: IxHash 1.21 Tie :: Toggle 1.07 Tie :: ToObject 0.03 時間:: CTime 99.062201 Time :: DaysInMonth 99.1117 時間:: Epoch 0.02 時間::ファジー0.34 時間::ユリウス日2003.1125 Time :: ParseDate 2006.0814 時間::タイムゾーン2006.0814
これを機能としてcpan
ツールに追加するつもりだったので、それも行います。[時間が経ちます]そして、今、私は-l
スイッチを持っていcpan
ます。リリースする前に、他にもいくつか関係がありますが、githubにあります。それを待ちたくない場合は、-a
スイッチを試して自動バンドルを作成することもできますが、それによってポッドがリストに追加されます。
幸運を;
ここにトリックを行うスクリプトがあります:
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
Perl - 5.10.1
モジュールはリストされていません。
これにはCPANの「r」コマンドを使用するのが好きです。古いスタイルでCPANシェルに入ることができます:
sudo perl -MCPAN -e shell
または、ほとんどの新しいシステムでは、「cpan」コマンドがあるため、このコマンドでシェルに移動します。
sudo cpan
(通常のユーザーとして実行できるようにcpanを設定していない限り、通常は「sudo」を使用してrootとして実行するか、「su-」を使用してrootになりますが、rootとしてインストールします。このマシンにrootがない場合でも、CPANシェルを使用してこの情報を見つけることができますが、モジュールをインストールすることはできず、最初に少しセットアップを行う必要がある場合があります。それを実行します。)
次に、cpanシェルに入ったら、「r」コマンドを使用して、インストールされているすべてのモジュールとそのバージョンを報告できます。したがって、「cpan>」プロンプトで「r」と入力します。これにより、インストールされているすべてのモジュールとそのバージョンが一覧表示されます。使用する '?' さらに助けを得る。
sudo
ここに?それは完全に不要です。
これは* nixでそれを行うための本当にハックな方法です、あなたは本当に気にしないいくつかのもの(すなわち:warnings :: registerなど)を得るでしょう、しかしそれはあなたにアクセス可能なすべての.pmファイルのリストを与えるはずですperl。
for my $path (@INC) {
my @list = `ls -R $path/**/*.pm`;
for (@list) {
s/$path\///g;
s/\//::/g;
s/\.pm$//g;
print;
}
}
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
*.pm
モジュールへのフルパスを明確に示しているため、非常に優れています。あなたは...多くの重複を見ることができる
私はちょうど昨日、まさにこれを行うためにperlスクリプトを書きました。スクリプトは、区切り文字として「::」を使用して、@ INCにインストールされているperlモジュールのリストを返します。-を使用してスクリプトを呼び出します
perl perlmod.pl
または
perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)
今のところ、ソフトリンクの繰り返しに問題があったため、スクリプトは現在のディレクトリ( '。')をスキップしますが、17行目のgrep関数をから変更することで含めることができます。
grep { $_ !~ '^\.$' } @INC
ただ、
@INC
スクリプトはここにあります。
インストールされているすべての.pmファイルを一覧表示するさらに別のコマンドラインツールを次に示します。
正規表現に一致するインストール済みのPerlモジュールを検索します
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で指定)を、表示された回数ではなく、キーの値として保存するように適合させることができます。
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の質問に正確に答えていないことを理解していますが、私が行ったのと同じ理由でここにたどり着いた人のために投稿しています。それはスタックの問題です***あなたがいる質問を見つけることはほとんど不可能ですそれが存在する場合でも、スタック***はほとんど常にグーグルのトップヒットです!)
Perlクックブックには、必要なことを実行するスクリプト「pmdesc」の反復がいくつか含まれています。Googleで「PerlCookbookpmdesc」を検索すると、他のQ&Aサイトの記事、ネット上のいくつかのコードリスト、ソリューションの説明、さらにはいくつかの改良点が見つかります。
インストールされているモジュールのリストを出力するPerlワンライナーは次のとおりです。
perl -MExtUtils::Installed -MData::Dumper -e 'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'
Data :: Dumperがインストールされていることを確認してください。
これは、@ JamesThomasMoon1979によるスクリプトをワンライナーとして書き直したものです。
perl -MExtUtils::Installed -e '$i=ExtUtils::Installed->new();
print "$_ ".$i->version($_)."\n" for $i->modules();'
Perlスクリプトを入力すると、インストールされているすべてのモジュールが@INCのフォルダーの下に.pmファイルとしてインストールされるため、小さな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
find `perl -le'print for@INC'` -name '*.pm'
Linuxの場合、最も簡単な方法は次のとおりです。
dpkg -l | grep "perl"
これは私のために働きます
perl -e 'print join("\n",@INC,"")'
これが私がしていることです。perl -M{cpan_module}
エラーが表示されない場合は、モジュールがインストールされている可能性があります。