Spring til indhold
cd /languages
  • Script-arv
  • Programmering
  • AST- og symbolunderstøttelse

Perl i Maguyva: pakke- og subrutinegrafer

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.

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, og se derefter understøttelsesmatricen på kompatibilitetssiden. Hvis miljøet flytter til et andet scriptsprog, så sammenlign med guiden til Python.

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.

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.