Vai al contenuto
cd /languages
  • Patrimoni di script
  • Programmazione
  • Supporto AST e simboli

Perl in Maguyva: grafi di package e subroutine

Maguyva supporta Perl con AST, simboli e grafo, così gli agenti IA seguono package, subroutine, import use e require e costruttori nel Perl legacy.

Perché è difficile modificare Perl in sicurezza

Il codice Perl è denso, flessibile e spesso scritto da persone andate via da anni. I sigil cambiano il significato di un nome, i package fanno anche da classi, e lo stesso modulo viene caricato da script in molte directory. Una ricerca testuale trova le stringhe, ma non dice a un agente quale subroutine uno script chiama davvero.

Maguyva fornisce all’agente package, subroutine, import e costruttori come struttura, così può delimitare una modifica prima di toccare il codice.

Cosa estrae Maguyva in Perl

Maguyva copre .pl, .pm, .t, .pod e .perl. Le subroutine vengono estratte come funzioni e le dichiarazioni package come classi, e ai nomi delle definizioni vengono tolti i sigil ($, @, %, &, *), così variabili e subroutine sono ricercabili con il loro nome semplice.

Gli import derivano dalle istruzioni use, require e package. Le chiamate di metodo nella forma Class->new contano come istanziazione, e bless e tie restano di proposito nel grafo delle chiamate. Il grafo registra anche ereditarietà, override, riferimenti di tipo, letture e scritture, e sollevamento di eccezioni.

Circa 189 funzioni built-in (print, open, die, warn e simili) vengono filtrate dalle relazioni di chiamata, così il codice del repository risalta.

Esempi di prompt per agenti

  • “Quali script usano Billing::Invoice e quali sue subroutine chiamano?” (dependency_search incoming)
  • “Dove viene costruito Report::Monthly e cosa succede dopo ->new?” (find_symbol, poi get_task_context)
  • “Trova tutti i file di test che esercitano Auth::Session.” (text_pattern_search, poi find_symbol)

Limiti noti

  • I metodi Perl classici sono normali dichiarazioni sub dentro un package, quindi nella ricerca strutturale solo la più recente sintassi dedicata method viene classificata come metodo. Usa il preset functions per il Perl orientato agli oggetti più vecchio.
  • Le chiamate alle funzioni built-in filtrate non compaiono come archi del grafo. Usa text_pattern_search quando ti serve ogni chiamata a open o print.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Se il patrimonio sta migrando verso un altro linguaggio di scripting, confrontalo con la guida a Python.

Il più adatto per

  • > Team che hanno ereditato servizi Perl, applicazioni CGI o script batch e di reportistica ancora in produzione.
  • > Basi di codice incentrate sui moduli, in cui i package `.pm` sono condivisi da molti script e file di test.
  • > Lavori di migrazione o dismissione in cui la prima domanda è quali script dipendono da quali moduli.

Workflow degli agenti

  • > Elencare tutti gli script e i moduli che usano un package condiviso prima di modificarlo.
  • > Trovare dove una classe viene costruita con `->new` e quali subroutine chiama dopo.
  • > Tracciare un report o un job dallo script di ingresso attraverso i moduli che carica.

Dettagli del motore

  • > Il supporto a Perl copre `.pl`, `.pm`, `.t`, `.pod` e `.perl`. Le subroutine sono funzioni e le dichiarazioni `package` sono classi.
  • > I sigil vengono rimossi dai nomi delle definizioni, `use` e `require` diventano import, e `Class->new` conta come istanziazione.
  • > Circa 189 funzioni built-in come `print`, `open` e `die` vengono filtrate dalle chiamate, mentre `bless` e `tie` restano nel grafo.

Punti di ingresso MCP utili

  • find_symbol

    Usalo con il nome di un package o di una subroutine; i sigil vengono rimossi, quindi cerca il nome semplice.

  • dependency_search

    Usa la navigazione incoming su un modulo condiviso per vedere quali script e package ne dipendono.

  • text_pattern_search

    Usalo per built-in filtrate, chiavi di configurazione e stringhe SQL che il grafo delle chiamate lascia fuori.