# Perl i Maguyva: pakke- og subrutinegrafer

Canonical source: https://maguyva.ai/nb/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øtter Perl med AST, symboler og graf, slik at AI-agenter kan følge pakker, subrutiner, use- og require-importer og konstruktører i eldre Perl.

## Støtteoversikt

- Nivå: AST- og symbolstøtte
- Programmering
- Filendelser: .perl, .pl, .pm, .pod, .t
- Ekte AST-analyse for syntaksbevisst søk og strukturell kontekst.
- Navngitte symboler mater semantisk oppslag og kryssreferanser. Grafnavigasjon er tilgjengelig når relasjonsuttrekk er aktivert.
- Dette språket bidrar med symboler og relasjoner til grafbasert søk; støttede kanttyper varierer med språkets egne konstruksjoner.
- Både AST-analyse og symboluttrekk er tilgjengelige.

## Best egnet

- Team som har arvet Perl-tjenester, CGI-applikasjoner eller batch- og rapportskript som fortsatt kjører i produksjon.
- Modultunge kodebaser der `.pm`-pakker deles av mange skript og testfiler.
- Migrerings- eller utfasingsarbeid der første spørsmål er hvilke skript som er avhengige av hvilke moduler.

## Agent-arbeidsflyter

- Liste alle skript og moduler som bruker en delt pakke før den endres.
- Finne hvor en klasse opprettes med `->new`, og hvilke subrutiner den kaller etterpå.
- Følge en rapport eller en jobb fra startskriptet gjennom modulene det laster inn.

## Hvorfor Perl-miljøer er vanskelige å endre trygt

Perl-kode er kompakt, fleksibel og ofte skrevet av folk som sluttet for mange år siden. Sigiler endrer betydningen av et navn, pakker fungerer også som klasser, og den samme modulen lastes av skript i mange kataloger. Et tekstsøk finner strengene, men forteller ikke en agent hvilken subrutine et skript faktisk kaller.

Maguyva gir agenten pakker, subrutiner, importer og konstruktører som struktur, slik at den kan avgrense en endring før den rører koden.

## Hva Maguyva henter ut i Perl

Maguyva dekker `.pl`, `.pm`, `.t`, `.pod` og `.perl`. Subrutiner hentes ut som funksjoner og `package`-deklarasjoner som klasser, og sigilene (`$`, `@`, `%`, `&`, `*`) fjernes fra definisjonsnavnene, slik at variabler og subrutiner kan søkes på de rene navnene.

Importer kommer fra `use`-, `require`- og `package`-setninger. Metodekall på formen `Class->new` teller som instansiering, og `bless` og `tie` beholdes med vilje i kallgrafen. Grafen registrerer også arv, overstyringer, typereferanser, lesinger og skrivinger samt kastede unntak.

Rundt 189 innebygde funksjoner (`print`, `open`, `die`, `warn` og lignende) filtreres ut av kallrelasjonene, slik at koden i repositoriet kommer tydelig frem.

## Eksempler på prompter for agenter

- «Hvilke skript bruker `Billing::Invoice`, og hvilke av subrutinene kaller de?» (`dependency_search` incoming)
- «Hvor opprettes `Report::Monthly`, og hva skjer etter `->new`?» (`find_symbol`, deretter `get_task_context`)
- «Finn alle testfiler som tester `Auth::Session`.» (`text_pattern_search`, deretter `find_symbol`)

## Kjente begrensninger

- Klassiske Perl-metoder er vanlige `sub`-deklarasjoner i en pakke, så i strukturelt søk klassifiseres bare den nyere, dedikerte `method`-syntaksen som metode. Bruk forhåndsinnstillingen `functions` for eldre objektorientert Perl.
- Kall til filtrerte innebygde funksjoner vises ikke som kanter i grafen. Bruk `text_pattern_search` når du trenger hvert kall til `open` eller `print`.

## Neste steg

Koble til et repositorium med [hurtigstarten](/nb/docs/quickstart), og se deretter støttematrisen på [kompatibilitetssiden](/nb/docs/compatibility). Hvis miljøet flytter til et annet skriptspråk, kan du sammenligne med [veiledningen for Python](/nb/languages/python).

## Motordetaljer

- Perl-støtten dekker `.pl`, `.pm`, `.t`, `.pod` og `.perl`. Subrutiner er funksjoner, og `package`-deklarasjoner er klasser.
- Sigiler fjernes fra definisjonsnavn, `use` og `require` blir importer, og `Class->new` teller som instansiering.
- Rundt 189 innebygde funksjoner som `print`, `open` og `die` filtreres ut av kallene, mens `bless` og `tie` blir værende i grafen.

## Nyttige MCP-inngangspunkter

- `find_symbol`: Bruk det for et pakke- eller subrutinenavn; sigiler fjernes, så søk på det rene navnet.
- `dependency_search`: Bruk incoming-traversering på en delt modul for å se hvilke skript og pakker som er avhengige av den.
- `text_pattern_search`: Bruk det for filtrerte innebygde funksjoner, konfigurasjonsnøkler og SQL-strenger som kallgrafen utelater.
