2010-11-30 2 views
7

Ich habe mehrere CPAN-Module, die umfangreiche Meta-Programmierung verwenden, um auf Boiler-Platte zu reduzieren und Refactoring zu erleichtern.Wie kann CPAN (Perl) über Pakete, die mit Meta-Programmierung erstellt wurden, informiert werden?

Die Folge davon ist, dass es viele Pakete gibt, die programmgesteuert erstellt werden, daher gibt es nie eine package X::Y::Z; Zeile im Quellcode für CPAN zu finden (und dann verwenden, um den Namespace zu Ihrer first-come-Liste hinzuzufügen reservierte Namespaces).

Also meine Frage ist, ob es eine bevorzugte Möglichkeit gibt, CPAN über diese Laufzeit erstellten Pakete wissen zu lassen. Hier sind die Optionen, die ich zur Zeit bin am überlegen:

  • manuell suchen nach unten alle Pakete und erstellen Sie eine Dummy-pm Datei für CPAN zu indizieren.
  • Suchen Sie Build.PL manuell und aktualisieren Sie es, um sie in die Liste provides aufzunehmen.
  • einige Code auf die Meta-Programmierung Routinen hinzufügen, um zu verfolgen, welche Pakete verwendet werden, und fügen Sie in einen Haken build dist die provides oder ein anderer Abschnitt von META.yaml

Die letzte Option, was derzeit zu aktualisieren Ich lehne mich an. Ich würde gerne wissen, ob es irgendwelche Probleme mit diesem Ansatz gibt, oder ob CPAN besser mit der vollständigen Liste der Pakete aktualisiert werden kann.

Antwort

4

Wenn ich Sie richtig lese, ist das kein Problem, sofern Sie nicht andere Namespaces überlisten. Es ist nicht erforderlich, jeden erstellten Namespace zu deklarieren, nur den Basisnamespace Ihrer Distribution und die mit der Distribution verknüpften Dateien. Wenn Sie bestimmte Namespaces "reservieren" möchten, anstatt leere .pm-Dateien zu erstellen, sehen Sie sich stattdessen das Erstellen von .pod-Dateien und -Dokumenten an.

+0

Zumindest im Falle meines schlimmsten Täters 'List :: Gen 'enthält keines der von der Laufzeit erstellten Pakete irgendwelche Funktionen, die ein Endbenutzer jemals direkt aufrufen sollte. Daher ist es nicht wirklich sinnvoll, Endbenutzerdokumentation für sie bereitzustellen. Ich weiß, dass es nicht notwendig ist, alle Paketnamen zu deklarieren, aber ich dachte mir, dass PAUSE über sie "die beste" Praxis kennt. –

+0

Alle PAUSE kümmert sich darum, dass die entsprechenden Dateien (META.yml/.json, MANIFEST, usw.) vorhanden und korrekt formatiert sind. Sobald Sie einen Namespace haben, ist es Ihr Anliegen, was Sie tun, und nicht andere, es sei denn, sie haben die Erlaubnis, in Ihrem Namespace einen Beitrag zu leisten. Solange Sie in Ihrer Dokumentation erklären, dass Namespaces automatisch generiert werden, haben Sie Ihren Teil dazu beigetragen. – squeeks

+0

=> bist du dir sicher? Laut brian d foys Blogbeitrag (http://www.effectiveperlprogramming.com/blog/884): Wenn PAUSE Ihnen einen Namespace als Hauptbetreuer zuweist, "besitzen" Sie nur genau diesen Namespace. Obwohl Perl-Namespaces aussehen, als wären sie hierarchisch, sind sie es nicht. Das heißt, es gibt nichts in Perl, das sich darum kümmert, welchen Namespace Sie verwenden oder von welchem ​​Ihr Paket erbt. Die XML :: Simple-Namespaces erben aufgrund ihres Namens nicht von XML. Genauso haben Sie keine Berechtigungen für Foo :: Bar :: Baz, nur weil PAUSE Ihnen Berechtigungen für Foo :: Bar zugewiesen hat. –

Verwandte Themen