# Perl i Maguyva: paket- och subrutingrafer

Canonical source: https://maguyva.ai/sv/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 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.

## Stödöversikt

- Nivå: Stöd för AST och symboler
- Programmering
- Filändelser: .perl, .pl, .pm, .pod, .t
- Riktig AST-parsning för syntaxmedveten sökning och strukturell kontext.
- Namngivna symboler driver semantisk uppslagning och korsreferenser. Grafnavigering är tillgänglig när relationsextraktion är aktiverad.
- Det här språket bidrar med symboler och relationer till grafmedveten sökning; vilka kanttyper som stöds varierar med språkets inbyggda konstruktioner.
- Både AST-parsning och symbolextraktion är tillgängliga.

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

## 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](/sv/docs/quickstart) och kontrollera sedan stödmatrisen på [kompatibilitetssidan](/sv/docs/compatibility). Om miljön flyttar till ett annat skriptspråk, jämför med [guiden för Python](/sv/languages/python).

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