module foo / bar.pm un consommateur qui fait p> ne reçoit pas le Je sais que je peux en faire deux modules distincts, mais je devrais toujours pouvoir faire ce travail, n'est-ce pas? P> P> foo :: wizzy :: x code> exporter p>
4 Réponses :
Lorsque vous appelez (voir donc (Au fait, il n'est pas conseillé d'utiliser des noms de paquets à baisses inférieurs, comme ceux-ci sont généralement réservé aux pragmates perl.) p> p> Utiliser foo :: bar code>, ce qui se passe effectivement est essentiellement:
Import code> n'est jamais appelé sur
foo :: Wizzy code>. Si vous souhaitez importer ces symboles aussi, vous pouvez appeler
commencer {foo :: wizzy-> importer} code> vous (après
Utiliser foo :: bar code>). Ou, comme vous l'avez dit, il suffit de scinder ces deux paquets en fichiers séparés, ce qui serait beaucoup plus lisible par l'homme. P>
L'OP pourrait également écrire une méthode personnalisée Import code> pour FOO :: Barre qui exporte les trucs de FOO :: Wizzy. (Pas que je le ferais de cette façon.)
@Michael: Ouais, je ne fais que mettre des paquets ensemble pour le code arrière de la serviette, donc à ce stade, j'irais "F-- it, je ne sauve aucun temps d'avoir ces deux paquets dans un seul fichier" et diviser les.
Vous pouvez le faire en utilisant Exporter's < Code> export_to_level code> méthode pour que le "paquet principal" à réexporter les symboles "Autres" de l'emballage, comme: si Je dois vraiment demander pourquoi em>, bien que je ne peux pas imaginer une utilisation pour cela qui est compatible avec les mots "bon code" :) p> p> Certains :: Autre :: Module Code> fait quelque chose de plus compliqué que "l'exportation tout" que vous aurez probablement besoin de manipulation de Fanier pour
@_ code>. P>
+1 J'ai oublié export_to_level code> et presque recréé la fonctionnalité ;-)
Oui, je commence toujours à avoir un peu de défensive quand je vois quelqu'un d'autre qui joue avec ma table de symboles. C'est comme une invasion de l'espace personnel: tu ferais mieux d'être en cas d'urgence ou marié à moi :)
Tout d'abord, je trouve utile d'utiliser des accolades enfermées pour contrôler la portée lors de la collecte de plusieurs packages dans un seul fichier. En outre, enfermer le package dans un bloc de début, il fonctionne plus comme un Donc, vous avez deux choix: p> dans foo / bar.pm: p> dans votre code principal: p> approprié utilisé code> a été utilisé pour le charger, mais c'est surtout si je suis en train de plonger dans le script principal.
Utiliser FOO code> est identique à celui
commencer {besoin foo; Foo-> importer} code>. P>
commencer {foo :: whizzy-> importer; } code> dans votre script principal. LI>
foo :: bar :: importer code> déclencheur
foo :: whizzy :: importer code> sur le module d'appel. LI>
ul>
à la fin du module, placez: puis le code peut simplement dire: p> pour obtenir foo :: Wizzy's Exportations. P> p>
thx to tout - le consensus semble - utiliser 2 fichiers que je faisais juste paresseux et je promets de dire foo pas foo
Dans ce cas, je vais vous uppoter! :)