# Perl in Maguyva: grafi di package e subroutine

Canonical source: https://maguyva.ai/it/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 supporta Perl con AST, simboli e grafo, così gli agenti IA seguono package, subroutine, import use e require e costruttori nel Perl legacy.

## Istantanea del supporto

- Livello: Supporto AST e simboli
- Programmazione
- Estensioni: .perl, .pl, .pm, .pod, .t
- Analisi AST reale per ricerca sintattica e contesto strutturale.
- I simboli nominati alimentano la ricerca semantica e i riferimenti incrociati. La navigazione del grafo è disponibile quando è abilitata l’estrazione delle relazioni.
- Questo linguaggio contribuisce con simboli e relazioni alla ricerca basata sul grafo; i tipi di arco supportati variano in base ai suoi costrutti nativi.
- Sono disponibili sia l’analisi AST sia l’estrazione dei simboli.

## 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.

## 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](/it/docs/quickstart), poi consulta la matrice di supporto nella [pagina di compatibilità](/it/docs/compatibility). Se il patrimonio sta migrando verso un altro linguaggio di scripting, confrontalo con la [guida a Python](/it/languages/python).

## 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.
