Zum Inhalt springen
cd /languages
  • Skriptbestände
  • Programmierung
  • AST- und Symbol-Support

Perl in Maguyva: Paket- und Subroutinen-Graphen

Maguyva unterstützt Perl mit AST, Symbolen und Graph, damit KI-Agenten Pakete, Subroutinen, use- und require-Importe sowie Konstruktoren in Legacy-Perl verfolgen.

Warum Perl-Bestände schwer sicher zu ändern sind

Perl-Code ist dicht, flexibel und oft von Leuten geschrieben, die vor Jahren gegangen sind. Sigils ändern die Bedeutung eines Namens, Pakete dienen zugleich als Klassen, und dasselbe Modul wird von Skripten in vielen Verzeichnissen geladen. Eine Textsuche findet die Strings, sagt einem Agenten aber nicht, welche Subroutine ein Skript tatsächlich aufruft.

Maguyva gibt dem Agenten Pakete, Subroutinen, Importe und Konstruktoren als Struktur, damit er eine Änderung eingrenzen kann, bevor er den Code anfasst.

Was Maguyva in Perl extrahiert

Maguyva deckt .pl, .pm, .t, .pod und .perl ab. Subroutinen werden als Funktionen und package-Deklarationen als Klassen extrahiert; bei Definitionsnamen werden die Sigils ($, @, %, &, *) entfernt, sodass Variablen und Subroutinen unter ihrem bloßen Namen durchsuchbar sind.

Importe entstehen aus use-, require- und package-Anweisungen. Methodenaufrufe der Form Class->new zählen als Instanziierung, und bless sowie tie bleiben bewusst im Aufrufgraphen. Der Graph erfasst außerdem Vererbung, Overrides, Typreferenzen, Lese- und Schreibzugriffe sowie ausgelöste Ausnahmen.

Etwa 189 eingebaute Funktionen (print, open, die, warn und ähnliche) werden aus den Aufrufbeziehungen gefiltert, damit der Code des Repositorys hervortritt.

Beispiel-Prompts für Agenten

  • „Welche Skripte nutzen Billing::Invoice, und welche seiner Subroutinen rufen sie auf?“ (dependency_search incoming)
  • „Wo wird Report::Monthly erzeugt, und was passiert nach ->new?“ (find_symbol, dann get_task_context)
  • „Finde jede Testdatei, die Auth::Session prüft.“ (text_pattern_search, dann find_symbol)

Bekannte Grenzen

  • Klassische Perl-Methoden sind gewöhnliche sub-Deklarationen innerhalb eines Pakets, daher wird in der Struktursuche nur die neuere dedizierte method-Syntax als Methode eingeordnet. Nutze für älteres objektorientiertes Perl das Preset functions.
  • Aufrufe gefilterter eingebauter Funktionen erscheinen nicht als Graphkanten. Verwende text_pattern_search, wenn du jeden open- oder print-Aufruf brauchst.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die Unterstützungsmatrix auf der Kompatibilitätsseite. Wenn der Bestand in eine andere Skriptsprache wandert, vergleiche mit dem Python-Leitfaden.

Am besten geeignet

  • > Teams, die Perl-Dienste, CGI-Anwendungen oder Batch- und Report-Skripte geerbt haben, die noch produktiv laufen.
  • > Modullastige Codebasen, in denen `.pm`-Pakete von vielen Skripten und Testdateien gemeinsam genutzt werden.
  • > Migrations- oder Abschaltprojekte, bei denen die erste Frage lautet, welche Skripte von welchen Modulen abhängen.

Agentenabläufe

  • > Jedes Skript und Modul auflisten, das ein gemeinsames Paket nutzt, bevor es sich ändert.
  • > Finden, wo eine Klasse mit `->new` erzeugt wird und welche Subroutinen sie danach aufruft.
  • > Einen Report oder Job vom Einstiegsskript über die geladenen Module nachverfolgen.

Engine-Einordnung

  • > Die Perl-Unterstützung deckt `.pl`, `.pm`, `.t`, `.pod` und `.perl` ab. Subroutinen sind Funktionen, und `package`-Deklarationen sind Klassen.
  • > Sigils werden aus Definitionsnamen entfernt, `use` und `require` werden zu Importen, und `Class->new` zählt als Instanziierung.
  • > Etwa 189 eingebaute Funktionen wie `print`, `open` und `die` werden aus Aufrufen gefiltert, während `bless` und `tie` im Graphen bleiben.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Nutz es für einen Paket- oder Subroutinennamen; Sigils werden entfernt, such also nach dem bloßen Namen.

  • dependency_search

    Nutz die eingehende Traversierung auf einem gemeinsamen Modul, um zu sehen, welche Skripte und Pakete davon abhängen.

  • text_pattern_search

    Nutz es für gefilterte eingebaute Funktionen, Konfigurationsschlüssel und SQL-Strings, die der Aufrufgraph auslässt.