2009-07-21 16 views
27

use My::Modulerequire My::Moduleの違いは何ですか? perldoc -q "difference between require and use"からPerlでは、モジュールのロードにuseとrequireの違いは何ですか?

+2

@その他:これはmです。とにかくそのうちの1人。 – ysth

+7

これはあなた自身で簡単に理解できるかもしれませんが、初心者が尋ねやすいPerlの質問は間違いありません。私はなぜそれがstackoverflow上にすべきではないか分からない。害はどこですか? – innaM

答えて

30

use機能:

use ModuleName; 

require機能を使用して、次のコードと同等です:

BEGIN { 
    require ModuleName; 
    ModuleName->import; 
} 

BEGINブロックは、このコードは、すぐパーサはそれを見ているとして実行されるようになります。 requireがモジュールをロードします。または、dieが試行しています。そして、モジュールのimport関数が呼び出されます。 import関数は、あらゆる種類のことを行う可能性がありますが、多くの場合、Exporterモジュールを持つ名前空間に関数を読み込むのが一般的です。

それは、そのインポートは、この場合には呼び出されません注意することが重要である:その場合は

use ModuleName(); 

、それはPerlが偉大なドキュメントが付属しています

BEGIN { 
    require ModuleName; 
} 
+1

マンページによれば、それはまったく同等です。 – Inshallah

+1

@Inshalla私は間違った記憶のためにちょっとした揺れの部屋を残しています。 –

15

use Moduleはそのuse

4.1を除いて、require Moduleのようなものです:実行時ではない、コンパイル時にモジュールをロードします。

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

3

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

+3

'import'の呼び出しを忘れないでください。 –

+2

これは、Perlのテストや面接でお探しの答えです。あなたはこれを暗記する必要があります! – Hawk

10

に相当します。数か月に一度は少なくとも1回、全ドキュメントを読むことで誰もが恩恵を受けるでしょう。それはすでに が含まれていない場合、ライブラリファイルは こと

C:\>perldoc -f require

そうでない場合require要求が含まれています。このファイルは、 do-FILEメカニズムを介して含まれています。 は基本的にはさまざまなeval ですが、起動するスクリプトの字句変数 は含まれているコードからは見えません となります。 セマンティクスは次のようなものです サブルーチン:

...など同様に、

C:\>perldoc -f use

は、一般的に、あなたの パッケージの中にある特定の サブルーチンや変数名に別名で指定されたモジュール、 から 現在のパッケージの中にいくつかの意味をインポートします。

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

と完全に等価です。ただし、Moduleはベアワードでなければなりません。

...など

私はそれが上記未満有益だと思うが、perlfaq entryもあります。

+1

すばらしい 'perldoc'コマンドに加えて、http://perldoc.perl.org –

+0

Ahを介して、同じドキュメントすべてにアクセスできます。 kbdタグを使用すると、リンクが何であるかをわかりにくくするだけでなく、レンダリングも非常にきれいになります。 – ysth

関連する問題