# Perl i Maguyva: pakke- og subrutinegrafer

Canonical source: https://maguyva.ai/da/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 understøtter Perl med AST, symboler og graf, så AI-agenter kan følge pakker, subrutiner, use- og require-importer og konstruktører i ældre Perl.

## Øjebliksbillede af understøttelse

- Niveau: AST- og symbolunderstøttelse
- Programmering
- Filendelser: .perl, .pl, .pm, .pod, .t
- Rigtig AST-parsing til syntaksbevidst søgning og strukturel kontekst.
- Navngivne symboler understøtter semantisk opslag og krydsreferencer. Grafnavigation er tilgængelig, når relationsudtræk er aktiveret.
- Dette sprog bidrager med symboler og relationer til grafbaseret søgning; de understøttede kanttyper varierer med sprogets egne konstruktioner.
- Både AST-parsing og symboludtræk er tilgængelige.

## Bedst egnet til

- Teams, der har arvet Perl-tjenester, CGI-applikationer eller batch- og rapportscripts, som stadig kører i produktion.
- Modultunge kodebaser, hvor `.pm`-pakker deles af mange scripts og testfiler.
- Migrerings- eller udfasningsarbejde, hvor det første spørgsmål er, hvilke scripts der afhænger af hvilke moduler.

## Agent-arbejdsgange

- Liste alle scripts og moduler, der bruger en delt pakke, før den ændres.
- Finde, hvor en klasse oprettes med `->new`, og hvilke subrutiner den kalder bagefter.
- Følge en rapport eller et job fra startscriptet gennem de moduler, det indlæser.

## Hvorfor Perl-miljøer er svære at ændre sikkert

Perl-kode er kompakt, fleksibel og ofte skrevet af folk, der stoppede for mange år siden. Sigiler ændrer betydningen af et navn, pakker fungerer også som klasser, og det samme modul indlæses af scripts i mange mapper. En tekstsøgning finder strengene, men fortæller ikke en agent, hvilken subrutine et script faktisk kalder.

Maguyva giver agenten pakker, subrutiner, importer og konstruktører som struktur, så den kan afgrænse en ændring, før den rører koden.

## Hvad Maguyva udtrækker i Perl

Maguyva dækker `.pl`, `.pm`, `.t`, `.pod` og `.perl`. Subrutiner udtrækkes som funktioner og `package`-erklæringer som klasser, og sigilerne (`$`, `@`, `%`, `&`, `*`) fjernes fra definitionsnavnene, så variabler og subrutiner kan søges på deres rene navne.

Importer kommer fra `use`-, `require`- og `package`-sætninger. Metodekald af formen `Class->new` tæller som instansiering, og `bless` og `tie` bevares med vilje i kaldgrafen. Grafen registrerer også nedarvning, overskrivninger, typereferencer, læsninger og skrivninger samt kastede undtagelser.

Omkring 189 indbyggede funktioner (`print`, `open`, `die`, `warn` og lignende) filtreres fra kaldrelationerne, så repositoryets kode træder frem.

## Eksempler på prompts til agenter

- "Hvilke scripts bruger `Billing::Invoice`, og hvilke af dens subrutiner kalder de?" (`dependency_search` incoming)
- "Hvor oprettes `Report::Monthly`, og hvad sker der efter `->new`?" (`find_symbol`, derefter `get_task_context`)
- "Find alle testfiler, der afprøver `Auth::Session`." (`text_pattern_search`, derefter `find_symbol`)

## Kendte begrænsninger

- Klassiske Perl-metoder er almindelige `sub`-erklæringer i en pakke, så i strukturel søgning klassificeres kun den nyere dedikerede `method`-syntaks som metode. Brug forudindstillingen `functions` til ældre objektorienteret Perl.
- Kald til filtrerede indbyggede funktioner vises ikke som kanter i grafen. Brug `text_pattern_search`, når du har brug for hvert kald til `open` eller `print`.

## Næste skridt

Tilslut et repository med [hurtigstarten](/da/docs/quickstart), og se derefter understøttelsesmatricen på [kompatibilitetssiden](/da/docs/compatibility). Hvis miljøet flytter til et andet scriptsprog, så sammenlign med [guiden til Python](/da/languages/python).

## Motordetaljer

- Perl-understøttelsen dækker `.pl`, `.pm`, `.t`, `.pod` og `.perl`. Subrutiner er funktioner, og `package`-erklæringer er klasser.
- Sigiler fjernes fra definitionsnavne, `use` og `require` bliver til importer, og `Class->new` tæller som instansiering.
- Omkring 189 indbyggede funktioner som `print`, `open` og `die` filtreres fra kaldene, mens `bless` og `tie` bliver i grafen.

## Nyttige MCP-indgange

- `find_symbol`: Brug det til et pakke- eller subrutinenavn; sigiler fjernes, så søg på det rene navn.
- `dependency_search`: Brug incoming-gennemløb på et delt modul for at se, hvilke scripts og pakker der afhænger af det.
- `text_pattern_search`: Brug det til filtrerede indbyggede funktioner, konfigurationsnøgler og SQL-strenge, som kaldgrafen udelader.
