5

多分それはばかげた質問ですか?File使用するようにモジュールをインストールすると

cpanm File

Fileなどの下にすべてをインストールしますFile:Listingか?

4

3 に答える 3

5

ばかげた質問ではありません。あなたが試したくない理由は理解できます。

しかし、あなたは先に進むことができます

cpanm File

と呼ばれるモジュールがないため、ほとんど何も起こりませんFile

CPAN のモジュールはディストリビューションごとに編成されています。1 つのディストリビューションに 1 つ以上の関連モジュールを含めることができるため、cpanm最初に要求したモジュールがどのディストリビューションに含まれているかを確認して取得します。

そのディストリビューションの依存関係がチェックされ、古いものやまったくインストールされていないものがある場合は、それらのそれぞれを順番に取得してインストールします。最終的には、すべての依存関係が解決されるかcpanm、進行を停止する重大なエラーが発生します。

すべての依存関係がインストールされたら、モジュールを含むディストリビューションを解凍してインストールできます。

すべてが順調であれば、それで終わりです。簡単に言えば

cpanm File

Fileモジュールがないため、何もインストールされません。

cpanm File:Listing

を含むディストリビューションをインストールしますFile::Listing。これは、執筆時点ではGAAS/File-Listing-6.04.tar.gz

そのディストリビューションにもこれらのモジュールが含まれています

File::Listing::apache
File::Listing::dosftp
File::Listing::netware
File::Listing::unix
File::Listing::vms

そのため、cpanm最初にそれらのモジュールの依存関係がすべて満たされ、同じ基準で再帰的に続行されることが保証されます。


cpanより包括的なコマンド セットを備えたコマンドを試してみると便利な場合があることに注意してください。最も重要なのは、モジュール、ディストリビューション、作成者、およびバンドルを名前または正規表現で一覧表示することです。

入力cpanしてプロンプトを取得する

cpan>

求めることができるとき

cpan> help

使用可能なコマンドの概要が一覧表示されます。たとえば、File::Listingモジュールを調べることができます

cpan> m File::Listing

作者、ディストリビューション ("CPAN_FILE")、バージョンなどを表示するには、このようにします。

Module id = File::Listing
    CPAN_USERID  GAAS (Gisle Aas <gisle@ActiveState.com>)
    CPAN_VERSION 6.04
    CPAN_FILE    G/GA/GAAS/File-Listing-6.04.tar.gz
    UPLOAD_DATE  2012-02-15
    MANPAGE      File::Listing - parse directory listing
    INST_FILE    C:\Strawberry\perl\vendor\lib\File\Listing.pm
    INST_VERSION 6.04

正規表現を使用して、同様の名前のディストリビューションを探すこともできます

cpan> d /File-Listing/

2 つの一致する分布があることを確認するには

Distribution    GAAS/File-Listing-6.04.tar.gz
Distribution    PLICEASE/File-Listing-Ftpcopy-0.05.tar.gz
2 items found

File-ListingGisle Aasのディストリビューションだけを見ることができます

cpan> d GAAS/File-Listing-6.04.tar.gz

そして、とりわけそのディストリビューションのメンバーモジュール(「CONTAINSMODS」)について言われました

Distribution id = G/GA/GAAS/File-Listing-6.04.tar.gz
    CPAN_USERID  GAAS (Gisle Aas <gisle@ActiveState.com>)
    CPAN_VERSION 6.04
    CONTAINSMODS File::Listing File::Listing::apache File::Listing::dosftp File::Listing::netware File::Listing::unix File::Listing::vms
    UPLOAD_DATE  2012-02-15

cpanmcpanにはそのようなブラウジング機能がありません。そのため、それ自体を試してみて、完全な名前と正規表現パターンの両方でコマンドmとおそらくdコマンドをしばらく使用することをお勧めします。

CPAN リポジトリの構造を理解するとcpanm、一般的な使用法がはるかに迅速かつ正確になります。

于 2014-07-15T22:27:03.557 に答える
1

CPAN には、あなたが想像しているような階層的な組織はありません。Foo存在し、存在するからといって、それが意味のある意味で「下」にあるFoo::Barことを意味するわけではありません。そうかもしれませんが、多くの場合そうではありません。の一部ではありません。の一部ではありません。Foo::BarFooNet::SSH::PerlNet::SSHIO::AsyncIO

tobyink と Borodin がよく説明しているように、Perl モジュールは「ディストリビューション」の一部であり、CPAN にアップロードされたパッケージ ファイルです。モジュールのインストールを要求すると、CPAN クライアントはそのモジュールを含むディストリビューションをインストールし、そのディストリビューションがビルドまたは実行に依存するすべてのディストリビューションをインストールします。

于 2014-07-15T23:03:53.047 に答える
1

モジュールのインストールを要求すると、CPAN クライアント (cpanm など) はインデックスをチェックして、どのアーカイブ (つまり、おそらく .tar.gz ファイルですが、おそらく .tar.bz2 または .zip) に最新の承認済みバージョンが含まれているかを調べます。そのモジュールの。

次に、クライアントはそのアーカイブをダウンロードし、内部にあるインストール スクリプトを実行します。これにより、要求したモジュールだけでなく、他のバンドルされたモジュールが実際にインストールされる場合があります。(ただし、CPAN の多数のアーカイブには、それぞれ 1 つのモジュールしか含まれていません。)

途中で、クライアントは、インストールしているものにインストールが必要な依存関係があることを検出し、それらをインストールするキューに自動的に追加することもできます。

モジュールの名前は関係ありません。をインストールすると、名前が似ているからといってFoo自動的に取得されることはありません。と同じアーカイブ ファイルにある場合にFoo::Barのみ、自動的に取得されます。Foo::BarFoo

于 2014-07-15T21:53:44.590 に答える