試すことは別として
perldoc <module name>
私の空想を取り入れたり、ファイルシステムを調べたり、ディレクトリを調べたりするCPANモジュールについて、どのモジュールをインストールしたかわかりません。
インストールされているすべての CPAN モジュールの大きなリストを取得する最も簡単な方法は何ですか? コマンドラインまたはその他から。
これは、Perl FAQ で回答されています。この回答は、 ですぐに見つけることができますperldoc -q installed
。要するに、このスレッドで以前に取り上げた両方のバリアントを使用するExtUtils::Installed
か、使用することに帰着します。File::Find
また、FAQ エントリ「システムにインストールされているモジュールを見つけるにはどうすればよいですか?」を見つけることもできます。perlfaq3 で。perlfaqを見ると、すべての FAQ の回答のリストを見ることができます。
perldoc perllocal
編集: CPAN FAQに (少し) 詳細な情報があります
perldoc -q installed
それはうまくいくと主張していcpan -l
ますが、私にとってはうまくいきません。他のオプション:
cpan -a
インストールされたパッケージの素晴らしいリストを吐き出し、それらをファイルに書き込むという素晴らしい副作用があります。
perldoc perllocal は、CPAN 経由でインストールされたモジュールについてのみ報告することに注意してください。誰かがモジュールを手動でインストールしても、それらは見つかりません。また、複数の人がモジュールをインストールしていて、perllocal.pod がソース管理下にある場合、人々が競合を誤って解決し、リストを破損する可能性があります (たとえば、これは職場で発生しています)。
残念ながら、ソリューションは File::Find などを使用して @INC をウォークスルーしているようです。ただし、これはモジュールを見つけるだけでなく、ディストリビューション内の関連モジュールも見つけます。たとえば、Test::Harness の実際のディストリビューション名に加えて、TAP::Harness および TAP::Parser が報告されます (バージョン 3 以上を使用していると仮定します)。それらをディストリビューション名と一致させ、一致しない名前を破棄する可能性がありますが、ローカルでビルドおよびインストールされたモジュールを破棄する可能性があります。
brian d foy の backpan インデックス作成作業には、.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"
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 がリストに追加されます。
幸運を;
ここにトリックを行うスクリプトがあります:
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
これには CPAN 'r' コマンドを使用するのが好きです。古いスタイルで CPAN シェルに入ることができます:
sudo perl -MCPAN -e shell
または、ほとんどの新しいシステムには「cpan」コマンドがあるため、このコマンドでシェルに移動できます。
sudo cpan
(通常、「sudo」を使用してルートとして実行するか、実行する前に「su -」を使用してルートになる必要があります。ただし、通常のユーザーとして実行できるように cpan を設定していない限り、ルートとしてインストールします。このマシンにルートがない場合でも、CPAN シェルを使用してこの情報を見つけることができますが、モジュールをインストールすることはできません。それを実行します。)
次に、cpan シェルに入ったら、「r」コマンドを使用して、インストールされているすべてのモジュールとそのバージョンを報告できます。したがって、「cpan>」プロンプトで「r」と入力します。これにより、インストールされているすべてのモジュールとそのバージョンが一覧表示されます。使用する '?' さらに助けを得るために。
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
*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;
}
}
ターミナルでコマンドを使用して、システムにインストールされている perl モジュールのリストを取得できますinstmodsh
。出力を強化するために、次の 3 つのオプションを尋ねられます。
l - List all installed modules
m <module> - Select a module
q - Quit the program
次のコマンドを試してください
instmodsh
man perllocal
またはを試してくださいperldoc perllocal
。
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で指定)を、表示された回数ではなく、キーの値として保存するように適合させることができます。
インストールされているすべての .pm ファイルを一覧表示する別のコマンドライン ツールを次に示します。
正規表現に一致するインストール済みの Perl モジュールを見つける
昨日、まさにこれを行うための perl スクリプトを書きました。このスクリプトは、区切り記号として「::」を使用して、@INC にインストールされた perl モジュールのリストを返します。- を使用してスクリプトを呼び出します。
perl perlmod.pl
また
perl perlmod.pl <module name> #Case-insensitive(eg. perl perlmod.pl ftp)
ソフトリンクの再帰に問題があったため、スクリプトは現在のディレクトリ('.')をスキップしますが、17行目のgrep関数を次のように変更することで含めることができます。
grep { $_ !~ '^\.$' } @INC
ただ、
@INC
スクリプトはここにあります。
cd /the/lib/dir/of/your/perl/installation
perldoc $(find . -name perllocal.pod)
Windows ユーザーは、Windows エクスプローラーで検索して見つけるだけです。
Perlクックブックには、あなたが望むことをするスクリプト「pmdesc」のいくつかの反復が含まれています。「Perl Cookbook pmdesc」を Google で検索すると、他の Q&A サイトの記事、ネット上のいくつかのコード リスト、解決策の議論、さらにはいくつかの改良点が見つかります。
以下は、インストールされているモジュールのリストを出力する Perl のワンライナーです。
perl -MExtUtils::Installed -MData::Dumper -e 'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'
Data::Dumper がインストールされていることを確認してください。
これが私が行うことです。perl -M{cpan_module}
エラーが表示されない場合は、モジュールがインストールされている可能性が高くなります。