4

文档(Exporter 和 perlmodlib)说:

作为一般规则,如果模块尝试面向对象,则不导出任何内容。

但是 perlmodlib 也说:

标准的捆绑模块都应该在命名空间污染方面以明确定义的方式运行,因为它们使用 Exporter 模块。

所以我想知道,如果你去OO并且什么都不导出,你真的需要Exporter吗?如果你不这样做,这是否意味着没有一个标准模块在这个意义上是严格的面向对象的,或者这是否意味着它们EXPORT_OK有些东西,因为如果有人想从你的模块继承,你需要这样做?(这是真的吗?)或者您是否需要 Exporter 才能做到use MyModule; ... = new MyModule

4

1 回答 1

7

你是对的。如果一切都被称为 OBJECT::sub() 或 $obj->sub(),你应该没问题。

对于继承,您将需要使用@ISA,为此,您不需要导出器。

此外,您给出的第二个引用是关于导出数据注入模块的。

如果您使用:use libname ();针对使用 Exporter 导出的库,则可以保证不导出任何内容。这就是它可以用来防止命名空间污染的方式。如果您通过函数名称显式导出,则这些是您获得的唯一函数。

于 2009-02-03T13:56:10.237 回答