Hoppa till innehåll
cd /languages
  • Skriptarv
  • Programmering
  • Stöd för AST och symboler

Perl i Maguyva: paket- och subrutingrafer

Maguyva stöder Perl med AST, symboler och graf, så att AI-agenter kan följa paket, subrutiner, use- och require-importer och konstruktorer i äldre Perl.

Varför Perl-miljöer är svåra att ändra säkert

Perl-kod är kompakt, flexibel och ofta skriven av personer som slutade för flera år sedan. Sigiler ändrar betydelsen av ett namn, paket fungerar också som klasser, och samma modul laddas av skript i många kataloger. En textsökning hittar strängarna men säger inte till en agent vilken subrutin ett skript faktiskt anropar.

Maguyva ger agenten paket, subrutiner, importer och konstruktorer som struktur, så att den kan avgränsa en ändring innan den rör koden.

Vad Maguyva extraherar i Perl

Maguyva täcker .pl, .pm, .t, .pod och .perl. Subrutiner extraheras som funktioner och package-deklarationer som klasser, och sigilerna ($, @, %, &, *) tas bort ur definitionsnamnen så att variabler och subrutiner är sökbara på sina rena namn.

Importer kommer från use-, require- och package-satser. Metodanrop av formen Class->new räknas som instansiering, och bless och tie behålls avsiktligt i anropsgrafen. Grafen registrerar också arv, överskrivningar, typreferenser, läsningar och skrivningar samt kastade undantag.

Omkring 189 inbyggda funktioner (print, open, die, warn och liknande) filtreras bort ur anropsrelationerna så att repots kod syns.

Exempel på prompter för agenter

  • “Vilka skript använder Billing::Invoice, och vilka av dess subrutiner anropar de?” (dependency_search incoming)
  • “Var skapas Report::Monthly, och vad händer efter ->new?” (find_symbol, sedan get_task_context)
  • “Hitta alla testfiler som prövar Auth::Session.” (text_pattern_search, sedan find_symbol)

Kända begränsningar

  • Klassiska Perl-metoder är vanliga sub-deklarationer i ett paket, så i strukturell sökning klassas bara den nyare dedikerade method-syntaxen som metod. Använd förinställningen functions för äldre objektorienterad Perl.
  • Anrop till filtrerade inbyggda funktioner visas inte som kanter i grafen. Använd text_pattern_search när du behöver varje anrop till open eller print.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. Om miljön flyttar till ett annat skriptspråk, jämför med guiden för Python.

Bäst lämpad för

  • > Team som har ärvt Perl-tjänster, CGI-applikationer eller batch- och rapportskript som fortfarande körs i produktion.
  • > Modultunga kodbaser där `.pm`-paket delas av många skript och testfiler.
  • > Migrerings- eller avvecklingsarbete där första frågan är vilka skript som beror på vilka moduler.

Agentarbetsflöden

  • > Lista alla skript och moduler som använder ett delat paket innan det ändras.
  • > Hitta var en klass skapas med `->new` och vilka subrutiner den anropar därefter.
  • > Följa en rapport eller ett jobb från startskriptet genom modulerna det laddar.

Motordetaljer

  • > Perl-stödet täcker `.pl`, `.pm`, `.t`, `.pod` och `.perl`. Subrutiner är funktioner och `package`-deklarationer är klasser.
  • > Sigiler tas bort ur definitionsnamn, `use` och `require` blir importer, och `Class->new` räknas som instansiering.
  • > Omkring 189 inbyggda funktioner som `print`, `open` och `die` filtreras bort ur anropen, medan `bless` och `tie` stannar kvar i grafen.

Användbara MCP-ingångar

  • find_symbol

    Använd det för ett paket- eller subrutinnamn; sigiler tas bort, så sök på det rena namnet.

  • dependency_search

    Använd incoming-traversering på en delad modul för att se vilka skript och paket som beror på den.

  • text_pattern_search

    Använd det för filtrerade inbyggda funktioner, konfigurationsnycklar och SQL-strängar som anropsgrafen utelämnar.