Saltar al contenido
cd /languages
  • Parques de scripts
  • Programación
  • Soporte de AST y símbolos

Perl en Maguyva: grafos de paquetes y subrutinas

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.

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 y luego revisa la matriz de compatibilidad en la página de compatibilidad. Si el parque está migrando a otro lenguaje de scripting, compáralo con la guía de Python.

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.

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.