質問

ここで何が起こっているのか理解できません:

use PAR { file => 'foo.par', fallback => 1 };

匿名ハッシュだと思います。モジュールがそれをどのように使用しているか use ライン?光を当ててもらえますか?

編集:PARモジュールには興味がありません。カーテンの裏側でそれがどのように機能するかに興味があります。モジュールをそのように構成するにはどうすればよいですか?

他のヒント

あなたはモジュールをuseすると

、あなたはそれに引数のリストを渡すことができます。あなたの例では(タイプミスを持っていると思われ、終了引用符が欠落しているもの)を、一つの要素(ハッシュ参照)とのリストが渡されます。

より一般的には:

use Module LIST

は、このようになります。

BEGIN {
    require Module;
    Module->import( LIST );
}
もののすべてがコンパイル時に起こることを

BEGINブロック保証します。それはまだ存在しないかどうrequireは、メモリにモジュールをロードします。そして、モジュールのimport()方法は、元のLIST文で(useとして)渡されたどんな引数で呼び出されます。

は、引数のようにLISTで何かを行うには、独自のモジュールのためには、あなたのモジュールはimport()メソッドを定義する必要があります。多くのモジュールがそれをしません。むしろ、彼らはimport()クラスからExporterを継承します。詳細についてははperldoc -f使用を参照してください。

あなたのモジュールは、独自のimport()メソッドを定義する場合は、

、あなたがいずれかのクライアント・コードにエクスポートするシンボルにする必要があります自分自身や、より一般的に、export_to_level()によって提供さExporterメソッドを使用します。この方法の最初の引数は、シンボルをエクスポートするための呼び出しスタックのレベルを指定する正の整数です。あなたのモジュールを使用しているクライアントコードに、ある - 1つのレベルの現在のパッケージ上の輸出シンボルに1つの手段の最も一般的な値です。ここにあなたのimport()方法を行うために必要となるものの概要です。

sub import {
    my ($class, @args) = @_;

    # Do whatever you need to do with the LIST of arguments
    # supplied by the client code using your module.


    # Let Exporter do its normal work of exporting symbols
    # into the client code using your module.
    $class->export_to_level(1, @_);
}
はい、それは無名ハッシュです。これは、モジュールimportメソッドに引数として渡されます。

PARはCPANモジュール Perlのアーカイブツールキットのです。ハッシュリファレンスは、PARに渡される設定パラメータです。

コード

use PAR { file => 'foo.par, fallback => 1 };
use Foo::Bar;
使用Foo::Barへの手段が使用可能な場合、それ以外は、アーカイブ(おそらくfoo.parのアーカイブされたバージョンを保持している)「Foo::Bar」を使用するようにフォールバックします。

あなたの質問に対する直接の答え:PARは行います これ(340行目):

# called on "use PAR"
sub import {
    my $class = shift;
    [...]
    my @args = @_;
    [...]
    # process args to use PAR 'foo.par', { opts }, ...;
    foreach my $par (@args) {
        if (ref($par) eq 'HASH') { # <---- This is what handle's your case!
            # we have been passed a hash reference
            _import_hash_ref($par);
        }
        elsif ($par =~ /[?*{}\[\]]/) {
           # implement globbing for PAR archives
           [...]
        }
        else {
            # ordinary string argument => file
            [...]
        }
    }

残念ながら、そこで実際に何が起こっているのかを詳しく調べてみると、CPAN で最も複雑なモジュールの 1 つを学習サンプルとして選択したことに気づくでしょう。 代わりにモジュールに関する優れたドキュメント. 。何を探すべきかをガイドするには:モジュールを「使用」し、use ステートメントに引数を指定すると、perl はモジュールをロードし、引数のリストを使用してその「import」メソッドを呼び出します。

あなたの例のケースでは、引数が 1 つだけあります。ハッシュへの参照。{key=>"value",key2=>"value2",...} 構文は、匿名ハッシュのコンストラクターです。これらについては、以下に文書化されています。 perlref マニュアル ページ, 、しかし、より親しみやすい言葉で説明されています パールレフトのチュートリアル.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top