web-dev-qa-db-ja.com

Perlでは、モジュールをロードするための使用と必要性の違いは何ですか?

use My::Modulerequire My::Moduleの違いは何ですか?

27
Sam Lee

use 関数:

use ModuleName;

require 関数を使用した次のコードと同等です。

BEGIN {
    require ModuleName;
    ModuleName->import;
}

BEGIN ブロックにより、パーサーがコードを認識するとすぐにこのコードが実行されます。 requireはモジュールをロードするか、 die sを試行します。次に、モジュールのimport関数が呼び出されます。 import関数はあらゆる種類のことを実行できますが、usedした名前空間に関数をロードするのが一般的です(多くの場合 Exporter モジュール)。

この場合、インポートは呼び出されないことに注意することが重要です。

use ModuleName ();

その場合、それはと同等です

BEGIN {
    require ModuleName;
}
30
Chas. Owens

から perldoc -q "requireとuseの違い"

use Module のようなものです require Module、ただしuse

4.1:実行時ではなく、コンパイル時にモジュールをロードします。

4.2:そのパッケージから現在のパッケージにシンボルとセマンティクスをインポートします。

17
Silfverstrom

Perlには優れたドキュメントが付属しています。少なくとも数か月に1回は、ドキュメント全体を読むことで誰もが恩恵を受けるでしょう。

C:\>perldoc -f require

それ以外の場合、requireは、ライブラリファイルがまだ含まれていない場合は、ライブラリファイルを含めることを要求します。ファイルはdo-FILEメカニズムを介してインクルードされます。これは基本的に、呼び出し元のスクリプトの字句変数がインクルードされたコードから見えないという警告を伴う、さまざまな評価です。次のサブルーチンと同様のセマンティクスがあります。

...など。同様に、

C:\>perldoc -f use

通常、特定のサブルーチン名または変数名をパッケージにエイリアスすることにより、名前付きモジュールから現在のパッケージにいくつかのセマンティクスをインポートします。とまったく同じです

BEGIN { require Module; Module->import( LIST ); }

ただし、モジュールはベアワードでなければなりません。

...など

perlfaq entry もありますが、上記よりも情報量が少ないと思います。

10
Sinan Ünür

useはコンパイル時に実行され、requireは実行時に実行されます。

7