use My::Module
するとする はどう違いrequire My::Module
ますか?
4 に答える
use
機能:
use ModuleName;
require
関数を使用した次のコードと同等です。
BEGIN {
require ModuleName;
ModuleName->import;
}
このBEGIN
ブロックにより、パーサーがコードを認識するとすぐにこのコードが実行されます。require
モジュールをロードするか、試行die
します。そしてimport
、モジュールの関数が呼び出されます。import
関数はあらゆる種類のことを行う可能性がありますが、それを作成した名前空間に関数をロードするのが一般的です(use
多くの場合、Exporter
モジュールと共に)。
この場合、 import は呼び出されないことに注意してください。
use ModuleName ();
その場合、それは
BEGIN {
require ModuleName;
}
use Module
のようですがrequire Module
、それ以外はuse
4.1: 実行時ではなく、コンパイル時にモジュールをロードします。
4.2: シンボルとセマンティクスをそのパッケージから現在のパッケージにインポートします。
Perl には優れたドキュメントが付属しています。少なくとも数か月に 1 回、ドキュメント全体を読むことは誰にとっても有益です。
C:\>
perldoc -f require
それ以外の場合
require
、ライブラリ ファイルがまだインクルードされていない場合は、ライブラリ ファイルをインクルードする必要があります。ファイルは do-FILE メカニズムを介してインクルードされます。これは本質的に、呼び出しスクリプトのレキシカル変数がインクルードされたコードから見えないという警告を伴うさまざまな eval です。次のサブルーチンに似たセマンティクスがあります。
...など同様に、
C:\>
perldoc -f use
通常、特定のサブルーチンまたは変数名をパッケージにエイリアスすることにより、名前付きモジュールから現在のパッケージにいくつかのセマンティクスをインポートします。とまったく同等です。
BEGIN { require Module; Module->import( LIST ); }
ただし、Module はベアワードでなければなりません。
...など
perlfaq エントリもありますが、上記よりも情報が少ないと思います。
use
コンパイル時にrequire
実行され、実行時に実行されます。