6

と の間に違いはuse Modulename;ありuse Modulename();ますか? たとえば、時々私は見ます、use Carp;そして時々use Carp ();

4

4 に答える 4

12

文書化されているように、

use Modulename;

は基本的に同じです

BEGIN {
   require Modulename;
   import Modulename;
}

その間

use Modulename ();

は基本的に同じです

BEGIN { require Modulename; }

つまり、括弧は、何もインポートしたくないことを示しています。(また、プラグマがその作業を行うのを妨げます。)


Carp はエクスポートconfessします。デフォルトではcroakcarp

use Carp;

の略です

use Carp qw( confess croak carp );

使用することで

use Carp ();   # or: use Carp qw( );

confess、呼び出し元の名前空間には追加さcroakcarpません。これらは、完全修飾名で引き続き使用できます。

use Carp ();
Carp::croak(...);
于 2013-05-16T02:45:03.087 に答える
5

がないと()、パッケージのimportメソッドが呼び出され、デフォルトの名前のセットが呼び出し元のパッケージの名前空間にエクスポートされる可能性があります。

を渡すと、()「自分の名前空間に名前をインポートしないでください」と明示的に示されます。

とにかく、ほとんどの最新のオブジェクト指向モジュールは、デフォルトでは何もエクスポートしません。必要に応じて、呼び出し元の名前空間を手動で汚染することを止めるものは何もありませんが、指定()は、インポートしたからといって魔法のように表示される名前に依存していないというシグナルです。パッケージ。

于 2013-05-16T02:35:43.910 に答える