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