# Perl in Maguyva: Paket- und Subroutinen-Graphen

Canonical source: https://maguyva.ai/de/languages/perl

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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

## Unterstützungsüberblick

- Stufe: AST- und Symbol-Support
- Programmierung
- Dateiendungen: .perl, .pl, .pm, .pod, .t
- Echtes AST-Parsing für syntaxbewusste Suche und strukturellen Kontext.
- Benannte Symbole speisen semantisches Lookup und Cross-Referenzierung. Graph-Navigation ist verfügbar, wenn die Beziehungsextraktion aktiviert ist.
- Diese Sprache liefert Symbole und Beziehungen für die graphgestützte Suche; die unterstützten Kantentypen variieren je nach nativen Konstrukten der Sprache.
- AST-Parsing und Symbolextraktion sind beide verfügbar.

## 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.

## 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](/de/docs/quickstart) und prüfe dann die Unterstützungsmatrix auf der [Kompatibilitätsseite](/de/docs/compatibility). Wenn der Bestand in eine andere Skriptsprache wandert, vergleiche mit dem [Python-Leitfaden](/de/languages/python).

## 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.
