2009-02-03 60 views
4

该文档(出口商和阅读perlmodlib)说:如果我要在Perl中使用纯OO,我需要Exporter吗?

作为一般规则,如果模块是 努力成为面向对象然后 出口罢了。

但后来阅读perlmodlib也说:

标准,捆绑模块都 预计在一个定义良好的 方式表现方面,因为它们使用 Exporter模块到命名空间 污染。

所以我想知道,如果你去OO并且什么都不输出,你真的需要出口商吗?如果你不这样做,这是否意味着在这个意义上,没有一个标准模块是严格的OO,或者这意味着他们有些事情,因为如果有人想从你的模块继承,你需要这样做? (这是真的吗?)或者您需要出口商才能够use MyModule; ... = new MyModule

回答

7

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

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

另外,您给出的第二个引用是关于导出到模块中的数据。

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

+0

我刚刚发现了Pod :: Template,它回答了我的问题,但是我被@ISA困惑在里面,却没有被使用。所以澄清它 - 非常感谢! – Kev 2009-02-03 13:57:47