Hopp til innhold
cd /languages
  • Skriptarv
  • Programmering
  • AST- og symbolstøtte

Perl i Maguyva: pakke- og subrutinegrafer

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.

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, og se deretter støttematrisen på kompatibilitetssiden. Hvis miljøet flytter til et annet skriptspråk, kan du sammenligne med veiledningen for Python.

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.

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.