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