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、それ以外はuse4.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実行され、実行時に実行されます。