細かいエクスポーターのマニュアルから:
use YourModule;
これにより、YourModule のすべてのシンボルがuse@EXPORT
ステートメントの名前空間にインポートされます。
use YourModule ();
これにより、perl はモジュールをロードしますが、シンボルをインポートしません。
use YourModule qw(...);
これにより、呼び出し元によってリストされたシンボルのみが名前空間にインポートされます。リストされているすべての記号は、@EXPORT
または@EXPORT_OK
に含まれている必要があります。そうでない場合、エラーが発生します。Exporter の高度なエクスポート機能はこのようにアクセスされますが、シンボル名とは構文的に異なるリスト エントリを使用します。
したがって、あなたが を使用@EXPORT
し、誰かが通常use YourModule;
の を実行した場合、名前空間が のすべてで汚染されたことになります@EXPORT
。ただし、を使用する場合は@EXPORT_OK
、モジュールを使用する人が自分の名前空間に何が起こるかを制御できるように、インポートするものを具体的に要求する必要があります。
違いは、use
r の名前空間に入る内容を誰が制御するかという問題です。使用する場合は d@EXPORT
であるモジュールが行い、使用する場合は、インポートを行うコードが独自の名前空間を制御します。use
@EXPORT_OK
もちろん、use Whatever();
失礼なモジュールが名前空間を汚染しないようにすることはいつでもできますが、それは醜いので、名前空間全体に走り書きしたい失礼なコードをこじ開ける必要はありません。