4

ドキュメント (Exporter および perlmodlib) には次のように書かれています。

原則として、モジュールがオブジェクト指向になろうとしている場合は、何もエクスポートしません。

しかし、perlmodlib には次のようにも書かれています。

標準のバンドルされたモジュールはすべて、Exporter モジュールを使用するため、名前空間の汚染に関して明確に定義された方法で動作することが期待されます。

OO を行って何もエクスポートしない場合、Exporter は本当に必要なのでしょうか? そうでない場合、それは標準モジュールのどれもこの意味で厳密に OO ではないということですか、それともEXPORT_OK、誰かがあなたのモジュールから継承したい場合にそれを行う必要があるため、いくつかのことを意味するのでしょうか? (それは本当ですか?)または、できるようにするためだけにエクスポーターが必要use MyModule; ... = new MyModuleですか?

4

1 に答える 1

7

あなたは正しいです。すべてが OBJECT::sub() または $obj->sub() と呼ばれる場合は、問題ありません。

継承には @ISA を使用する必要があり、そのためにエクスポーターは必要ありません。

また、あなたが与えた2番目の引用は、モジュールに注ぐエクスポートされたデータに関するものです。

以下を使用する場合: use libname ();Exporter を使用してエクスポートするライブラリに対して、何もエクスポートしないことが保証されます。これが、名前空間の汚染を防ぐために使用できる方法です。関数名で明示的にエクスポートすると、取得できる関数はそれらだけになります。

于 2009-02-03T13:56:10.237 に答える