# Perl en Maguyva: grafos de paquetes y subrutinas

Canonical source: https://maguyva.ai/es/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 admite Perl con AST, símbolos y grafo, para que los agentes de IA sigan paquetes, subrutinas, importaciones use y require y constructores en Perl heredado.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .perl, .pl, .pm, .pod, .t
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Equipos que heredaron servicios en Perl, aplicaciones CGI o scripts de lotes y reportes que siguen en producción.
- Bases de código centradas en módulos donde los paquetes `.pm` se comparten entre muchos scripts y archivos de prueba.
- Trabajos de migración o retiro en los que la primera pregunta es qué scripts dependen de qué módulos.

## Flujos de trabajo del agente

- Listar todos los scripts y módulos que usan un paquete compartido antes de cambiarlo.
- Encontrar dónde se construye una clase con `->new` y qué subrutinas llama después.
- Rastrear un reporte o un job desde su script de entrada a través de los módulos que carga.

## Por qué es difícil cambiar Perl de forma segura

El código Perl es denso, flexible y a menudo lo escribieron personas que se fueron hace años. Los sigilos cambian el significado de un nombre, los paquetes funcionan también como clases, y el mismo módulo lo cargan scripts de muchos directorios. Una búsqueda de texto encuentra las cadenas, pero no le dice a un agente qué subrutina llama realmente un script.

Maguyva entrega al agente paquetes, subrutinas, importaciones y constructores como estructura, para que delimite un cambio antes de tocar el código.

## Qué extrae Maguyva en Perl

Maguyva cubre `.pl`, `.pm`, `.t`, `.pod` y `.perl`. Las subrutinas se extraen como funciones y las declaraciones `package` como clases, y a los nombres de definición se les quitan los sigilos (`$`, `@`, `%`, `&`, `*`), de modo que variables y subrutinas se pueden buscar por su nombre simple.

Las importaciones provienen de las sentencias `use`, `require` y `package`. Las llamadas a métodos de la forma `Class->new` cuentan como instanciación, y `bless` y `tie` se mantienen a propósito en el grafo de llamadas. El grafo también registra herencia, sobrescrituras, referencias de tipo, lecturas y escrituras, y lanzamiento de excepciones.

Unas 189 funciones integradas (`print`, `open`, `die`, `warn` y similares) se filtran de las relaciones de llamada para que destaque el código del repositorio.

## Ejemplos de prompts para agentes

- "¿Qué scripts usan `Billing::Invoice` y cuáles de sus subrutinas llaman?" (`dependency_search` incoming)
- "¿Dónde se construye `Report::Monthly` y qué ocurre después de `->new`?" (`find_symbol` y luego `get_task_context`)
- "Encuentra todos los archivos de prueba que ejercitan `Auth::Session`." (`text_pattern_search` y luego `find_symbol`)

## Limitaciones conocidas

- Los métodos clásicos de Perl son declaraciones `sub` comunes dentro de un paquete, así que en la búsqueda estructural solo la sintaxis dedicada más reciente `method` se clasifica como método. Usa el preset `functions` para el Perl orientado a objetos más antiguo.
- Las llamadas a funciones integradas filtradas no aparecen como aristas del grafo. Usa `text_pattern_search` cuando necesites cada llamada a `open` o `print`.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Si el parque está migrando a otro lenguaje de scripting, compáralo con la [guía de Python](/es/languages/python).

## Detalles del motor

- La compatibilidad con Perl cubre `.pl`, `.pm`, `.t`, `.pod` y `.perl`. Las subrutinas son funciones y las declaraciones `package` son clases.
- A los nombres de definición se les quitan los sigilos, `use` y `require` se convierten en importaciones, y `Class->new` cuenta como instanciación.
- Unas 189 funciones integradas como `print`, `open` y `die` se filtran de las llamadas, mientras que `bless` y `tie` permanecen en el grafo.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo con el nombre de un paquete o subrutina; los sigilos se eliminan, así que busca por el nombre simple.
- `dependency_search`: Usa el recorrido incoming sobre un módulo compartido para ver qué scripts y paquetes dependen de él.
- `text_pattern_search`: Úsalo para funciones integradas filtradas, claves de configuración y cadenas SQL que el grafo de llamadas deja fuera.
