12

Perl と共に配布されているモジュールを知るにはどうすればよいですか?

私の最初の推測では、ここにリストされているコア モジュールは常に含まれていると思いますが、これが明確に述べられていることはわかりません。ただし、このセット以外のモジュール (LWP など) を、Mac OS X および Linux にインストールすることなく使用しました。

だから私の質問を少し洗練するために:

  • すべての Perl インストールで配布されるモジュールは何ですか?

そして:どのモジュールが配布されているかを知るにはどうすればよいですか:

  • Linux (特に Debian/Ubuntu)?

  • マックOSX?

  • ソラリス?

いずれの場合も、最新バージョンのオペレーティング システムに標準で付属しているバージョンの Perl を使用しています。

ティア。

更新:質問の理由は、別の Linux および Solaris に展開するために Mac OS X および Linux で開発を行っており、これらのシステムの一部でルートを持っておらず、Mac OS XI の場合はルートを持っていないためです。コンパイラのAFAIKさえあります。したがって、さらにインストールすることなく、4 つの展開すべてで使用できるモジュールを知りたいのです。

4

8 に答える 8

15

Module::CoreListをインストールすると、コマンド ライン プログラムcorelistは、さまざまなバージョンの perl のモジュールとそのバージョンに関するすべての情報を表示できます。リンク先のページには、最新バージョンの perl の概要が記載されています。

多くの場合、ディストリビューションはこのリストよりも多くをデフォルトで提供することに注意してください。ただし、このリストはどこにでも存在すると想定できます (明示的に Win32 などの OS 依存モジュールでない限り)。

于 2009-02-20T23:43:23.130 に答える
9

正しい率直な答えはすでに与えられていますが、あなたは間違った質問をしていると思います。コア モジュールのみを使用して開発しようとしている可能性があります。なんで?依存関係を処理したくないため、おそらくこれを行っています。なんで?彼らはお尻の痛みになる可能性があるからです。しかし、 CPANを使用せずに Perl を開発すると、半分の力が失われます。あなたは自分自身を不自由にしています。価値がある。

更新: あなたが何をしようとしているのかについて詳しく知ったので、正しい質問に答えることができます。1 つ目は、「root を持っていないときにモジュールをインストールするにはどうすればよいですか?」です。簡単な答えは次のとおりです。

perl Makefile.PL PREFIX=/some/path LIB=/some/path/lib
...and all the rest as normal...

MakeMaker ベースのモジュール (LIB は、PREFIX の不正確な性質を制御するために使用されます。INSTALL_BASE が推奨されますが、下位互換性はありません)。

これは Module::Build 用です

perl Build.PL --install_base=/some/path

その後、モジュールは /some/path/lib に配置され、PERL5LIB環境変数またはuse lib qw(/some/path/lib)コードで設定できます。

これは、依存モジュールをソフトウェア配布に直接貼り付けて出荷できることを意味します。純粋な Perl モジュールでは問題なく動作します。コンパイラを必要とするものについては、他の人がコンパイル済みの実行可能ファイルを出荷できることを示唆しているように、 PARを見てください。

別の方法として、あなたのものを CPAN モジュールとして配布し、依存関係を詳しく説明し、CPAN クライアントにそれらを解決させることもできます。Module::AutoInstallを使用して、CPAN クライアントの外部でこのプロセスを実行することもできます。

おわかりのように、Perl アプリを出荷するときにコア モジュールだけを使用することに制限されているわけではありません。

于 2009-02-21T08:16:52.087 に答える
8

Module::CoreListはすでに言及されています。それは物事を簡単にするためのコマンドラインインターフェースが付属しています。すでにインストールされている場合、または特定のバージョンのPerlに付属していない可能性のあるものを把握する必要のあるプログラムがある場合に最適です。

特定のバージョンのperlに付属しているモジュールを知りたい場合はperldoc perlmodlib、コマンドラインで実行して完全なリストを確認できます。古いバージョンまたは新しいバージョンのPerlの場合は、CPANのPerlのページに移動し、ドロップダウンから目的のバージョン(5.6.2など)を選択してperlmodlib、ドキュメントのページに移動できます。(perlmodlibブラウザのテキスト検索に入力すると役立ちます)。

古いバージョンのPerlのコアではないためにモジュールを使用しないことを考えている場合は、PAR、Perl Archiverを使用して、追加の依存関係をバンドルするか、Perl自体を使用することを検討してください。Perl Training Australiaには、 PARの使用に関するPerlのヒントもあり、PARの使用を開始するための基本をカバーしています。

最高です、

ポール

于 2009-02-21T07:00:50.537 に答える
6

インストールしたモジュールとバージョンをすばやく確認するには、cpanツールを使用して自動バンドルを作成します。

 cpan -a

ExtUtils :: Installedは、より洗練されたものが必要な場合に役立ちます。

以前は「標準ライブラリ」という考え方がありましたが、実際には存在しません。Module :: CoreListは「標準ライブラリ」の内容を示しますが、多くのベンダーは追加のモジュールをインストールし、一部のベンダーはモジュールを削除または更新します。さらに、 Strawberry PerlActivePerlなどのディストリビューションには、多くのボーナスモジュールが付属しています。

また、モジュールをインストールするためにrootは必要ありません。rootがモジュールをインストールできるモジュールをインストールするために必要なのはrootだけです。perlfaq8は、モジュールを好きな場所にインストールするためのすべての詳細を提供します。分散Perlをクリーンに保つために、分散@INCディレクトリの外部にすべてのモジュールをインストールすることをお勧めします。

幸運を、

于 2009-03-20T18:39:43.203 に答える
1

local::libが必要なようです。ルートなしの cpan のすべての利点 (およびシステム perl は変更されません)。

于 2009-03-20T12:09:35.793 に答える
0

これに関する簡単なリファレンスは、Book Beginning Perlの付録 Dにあります。Perl 5.6 に適用されますが、私の知る限り、Perl 5.8 はこれらのいずれも削除せず、新しいもの (Digest::MD5、File::Temp、Filter::Simple、libnet、List::Util、Memoize など) のみを導入しました。 、MIME::Base64、Scalar::Util、Storable、Switch、Test::More、Test::Simple、Text::Balanced、Tie::Fileなど)

perl の各バージョンについては、perldocを参照してください。これはperl 5.8.8のリストです

于 2009-02-20T23:56:03.117 に答える
-1

この質問は今ではあまり重要ではありません (私は最終的なターゲット マシンでルート アクセス権を持っているので、必要なパッケージをインストールするだけです)。

まず、各ターゲット システムで次のコードを実行します。

foreach my $dir (@INC) {
    print "Directory: $dir\n";
    if (-d "$dir") {
        my @modules = `find $dir/ -name "*.pm"`;
        foreach my $m (@modules) {
            my $label = $m;
            $label =~ s|\n$||;
            $label =~ s|//+|/|g;
            $label =~ s|^$dir/||;
            print "$label\n";
        }
    }
}

find コマンドを備えた *nix システムが必要であることに注意してください。出力を 3 つのファイルにダンプし、並べ替えます。次に、次のようなコマンドを使用します(メモリから):

grep -F -x -f list-1.txt list2.txt > list-12.txt
grep -F -x -f list-12.txt list3.txt > list-123.txt

これで、list-123.txt に多かれ少なかれ共有モジュールのリストが含まれているはずです。

価値があるのは、3 つのシステムすべてがいくつかの追加モジュール、特に XML::Parser モジュールを共有していることです。

于 2009-03-20T09:04:32.290 に答える
-6

メインのシンボル テーブルを見ると、利用可能なすべての「標準」パッケージが表示されます...

print %main::;
于 2009-02-20T23:41:14.603 に答える