30

use My::Moduleするとする はどう違いrequire My::Moduleますか?

4

4 に答える 4

30

use機能:

use ModuleName;

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

BEGIN {
    require ModuleName;
    ModuleName->import;
}

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

この場合、 import は呼び出されないことに注意してください。

use ModuleName ();

その場合、それは

BEGIN {
    require ModuleName;
}
于 2009-07-21T20:54:01.877 に答える
18

perldoc -qrequireとuseの違い」より

use Moduleのようですがrequire Module、それ以外はuse

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

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

于 2009-07-21T20:42:00.340 に答える
10

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

C:\> perldoc -f require

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

...など同様に、

C:\> perldoc -f use

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

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

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

...など

perlfaq エントリもありますが、上記よりも情報が少ないと思います。

于 2009-07-21T21:01:07.353 に答える
7

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

于 2009-07-21T20:42:21.760 に答える