Pular para o conteúdo
cd /languages
  • Acervos de scripts
  • Programação
  • Suporte a AST e símbolos

Perl no Maguyva: grafos de pacotes e sub-rotinas

O Maguyva oferece suporte a Perl com AST, símbolos e grafo, para que agentes de IA sigam pacotes, sub-rotinas, importações use e require e construtores em Perl legado.

Por que é difícil mudar Perl com segurança

Código Perl é denso, flexível e muitas vezes escrito por pessoas que saíram há anos. Sigils mudam o sentido de um nome, pacotes servem também como classes, e o mesmo módulo é carregado por scripts em muitos diretórios. Uma busca textual encontra as strings, mas não diz a um agente qual sub-rotina um script realmente chama.

O Maguyva entrega ao agente pacotes, sub-rotinas, importações e construtores como estrutura, para que ele delimite uma mudança antes de mexer no código.

O que o Maguyva extrai em Perl

O Maguyva cobre .pl, .pm, .t, .pod e .perl. Sub-rotinas são extraídas como funções e declarações package como classes, e os nomes de definição têm os sigils ($, @, %, &, *) removidos, para que variáveis e sub-rotinas sejam encontradas pelo nome simples.

As importações vêm das instruções use, require e package. Chamadas de método na forma Class->new contam como instanciação, e bless e tie são mantidos de propósito no grafo de chamadas. O grafo também registra herança, sobrescritas, referências de tipo, leituras e escritas, e lançamento de exceções.

Cerca de 189 funções embutidas (print, open, die, warn e semelhantes) são filtradas das relações de chamada para que o código do repositório se destaque.

Exemplos de prompts para agentes

  • “Quais scripts usam Billing::Invoice e quais das suas sub-rotinas eles chamam?” (dependency_search incoming)
  • “Onde Report::Monthly é construído e o que acontece depois de ->new?” (find_symbol, depois get_task_context)
  • “Encontre todos os arquivos de teste que exercitam Auth::Session.” (text_pattern_search, depois find_symbol)

Limitações conhecidas

  • Métodos Perl clássicos são declarações sub comuns dentro de um pacote, então na busca estrutural só a sintaxe dedicada mais recente method é classificada como método. Use o preset functions para Perl orientado a objetos mais antigo.
  • Chamadas a funções embutidas filtradas não aparecem como arestas do grafo. Use text_pattern_search quando precisar de cada chamada a open ou print.

Próximos passos

Conecte um repositório pelo início rápido e depois confira a matriz de suporte na página de compatibilidade. Se o acervo está migrando para outra linguagem de script, compare com o guia de Python.

Uso ideal

  • > Equipes que herdaram serviços em Perl, aplicações CGI ou scripts de lote e relatórios que ainda rodam em produção.
  • > Bases de código centradas em módulos, em que pacotes `.pm` são compartilhados por muitos scripts e arquivos de teste.
  • > Trabalhos de migração ou desativação em que a primeira pergunta é quais scripts dependem de quais módulos.

Fluxos de trabalho de agente

  • > Listar todos os scripts e módulos que usam um pacote compartilhado antes de mudá-lo.
  • > Encontrar onde uma classe é construída com `->new` e quais sub-rotinas ela chama em seguida.
  • > Rastrear um relatório ou job desde o script de entrada pelos módulos que ele carrega.

Detalhes do motor

  • > O suporte a Perl cobre `.pl`, `.pm`, `.t`, `.pod` e `.perl`. Sub-rotinas são funções e declarações `package` são classes.
  • > Sigils são removidos dos nomes de definição, `use` e `require` viram importações, e `Class->new` conta como instanciação.
  • > Cerca de 189 funções embutidas como `print`, `open` e `die` são filtradas das chamadas, enquanto `bless` e `tie` continuam no grafo.

Pontos de entrada MCP úteis

  • find_symbol

    Use com o nome de um pacote ou sub-rotina; os sigils são removidos, então busque pelo nome simples.

  • dependency_search

    Use a travessia incoming em um módulo compartilhado para ver quais scripts e pacotes dependem dele.

  • text_pattern_search

    Use para funções embutidas filtradas, chaves de configuração e strings SQL que o grafo de chamadas deixa de fora.