2009-02-03 6 views
4

Les docs (Exportateur et perlmodlib) disent:Ai-je besoin d'un exportateur si je veux du pur OO en Perl?

En règle générale, si le module est essayer d'être orienté objet alors rien à l'exportation.

Mais perlmodlib dit aussi:

standard, les modules groupés sont tous censés se comporter d'une manière bien définie par rapport à l'espace de noms pollution, car ils utilisent le module Exportateur.

Donc, je me demande, si vous allez OO et n'exportez rien, avez-vous vraiment besoin de l'exportateur? Si vous ne le faites pas, est-ce que cela signifie qu'aucun des modules standard n'est strictement OO dans ce sens, ou cela signifie-t-il certaines choses parce que vous devez le faire si quelqu'un veut hériter de votre module? (Est-ce vrai?) Ou avez-vous besoin de l'exportateur juste pour pouvoir use MyModule; ... = new MyModule?

Répondre

7

Vous avez raison. Si tout sera appelé OBJECT :: sub() ou $ obj-> sub(), ça devrait aller.

Pour l'héritage, vous allez vouloir utiliser @ISA, et pour cela, vous ne devriez pas avoir besoin d'exportateur. En outre, la deuxième citation que vous avez donnée concerne les données exportées versées dans un module.

Si vous utilisez: use libname(); par rapport à une bibliothèque qui exporte à l'aide de l'exportateur, vous êtes assuré de ne rien exporter. C'est ainsi qu'il peut être utilisé pour empêcher la pollution des espaces de noms. Si vous exportez explicitement par nom de fonction, ce sont les seules fonctions que vous obtenez.

+0

Je venais de trouver Pod :: Template, qui a répondu à ma question, mais j'ai été intrigué par @ISA étant là, mais pas utilisé. Donc, cela clarifie - merci beaucoup! – Kev

Questions connexes