Cole Perl à esquerda e clique em "Converter" — a gente transforma em XMLCole código Perl

O que esta ferramenta faz

Se você mantém Perl que empurra XML pra algum lugar — um serviço SOAP antigo, uma config em XML, uma integração via CPAN — conhece o ritual: use XML::Simple, mexer em ForceArray e KeyAttr, montar uma ref de hash na mão e torcer pra saída ser o que o consumidor espera. Cole o Perl aqui e receba XML bem formado de uma passada só — um objeto blessed, uma ref de hash simples ou um package inteiro com construtor e acessores.

O conversor lê com clareza os padrões OO mais comuns em Perl. Um construtor que faz bless $self, $class com uma ref de hash vira um elemento XML cujos filhos espelham as chaves do hash. Refs de array viram elementos de contêiner com um filho por entrada (o nome do filho é a forma singular da chave, então items => [...] vira <items><item/>...</items>). Refs de hash aninhadas viram elementos aninhados. undef vira um elemento vazio em vez de ser descartado, pra forma bater com o que XML::Simple ou XML::LibXML fariam num round-trip.

Dá pra colar vários blocos package de uma vez — package Order; package OrderItem; package Address; — e cada um sai com seus campos atribuídos pelo construtor expandidos. Estruturas de dados planas (não-OO) também funcionam: mande my $data = { ... }; e a ferramenta caminha pelas refs, mantendo as chaves do hash como nomes de elementos. Pras regras mais fundas do Perl por trás disso, o perldoc oficial é a referência.

Como usar

Três passos. Funciona igual colando um package de dez linhas ou um módulo inteiro com helpers.

1

Cole seu Perl (ou carregue o exemplo)

Solte o código no editor da esquerda do jeito que está. Um package com construtor, uma ref de hash simples, packages aninhados ou uma mistura — tudo serve. Aperte Carregar exemplo pra ver um caso realista antes.

Não precisa tirar use strict;, use warnings; nem sua lista de require. Deixe o código como está no seu editor. Só cole.

2

Clique em Converter

Clique no botão verde Converter. A ferramenta lê as declarações de package, resolve as referências blessed e monta o XML numa passada. Um indicador curto de carregamento aparece enquanto processa.

3

Copie o XML

O painel da direita enche de XML bem formado e indentado que qualquer parser em conformidade com o padrão aceita. Cole direto no seu fluxo CPAN, numa integração SOAP legada, num arquivo de config em XML ou numa fixture de teste.

Quando isso realmente ajuda

Alimentar XML::LibXML ou XML::Simple

Você tem uma estrutura de dados Perl e quer ver exatamente como fica em XML antes de ligar o <code>XMLout</code> / <code>XML::LibXML::Document</code>. Cola, converte, copia, compara.

Integração com sistema legado

Uma integração baseada em CPAN ainda espera SOAP 1.1 ou um formato XML próprio. Cole sua representação Perl e obtenha um corpo realista pra mandar pro SoapUI ou pro curl.

Saindo do Perl

Trocando um serviço Perl velho por outra coisa? Exporte o formato dos dados em XML primeiro — é o terreno neutro pra portar pra Python, Java ou C#.

Docs que casam com o código

Gere exemplos XML pro README de um módulo no <a href="https://metacpan.org/" target="_blank" rel="noopener">MetaCPAN</a> ou pra um wiki interno direto dos seus packages reais, pra doc não ficar desatualizada.

Dúvidas comuns

Posso colar vários packages de uma vez?

Pode — cole um .pm inteiro ou vários blocos package empilhados. Cada package sai com as chaves de hash atribuídas pelo construtor expandidas e as refs de objetos aninhados resolvidas. Se Order tem uma ref de array de objetos OrderItem e uma ref de hash shipping_address, os três aparecem na saída.

Como lida com undef e chaves que não existem?

Uma chave cujo valor é undef vira um elemento vazio pra forma do XML ficar estável entre instâncias. Chaves que estão totalmente ausentes do hash são omitidas. Refs de array com arrays vazios viram elementos contêineres vazios (<items></items>) em vez de serem descartadas.

Refs de array e refs de hash funcionam do mesmo jeito?

Uma ref de array vira um elemento contêiner com um filho por entrada — por padrão o tag filho é a forma singular da chave (então items => [...]<items><item/>...</items>). Uma ref de hash vira um elemento aninhado cujos filhos espelham as chaves. Refs mistas (array de refs de hash, hash de arrays) aninham do mesmo jeito recursivamente.

E as referências blessed e herança múltipla?

Referências blessed mantêm o nome da classe disponível — pode ser usado como tag do elemento quando faz sentido. Pra herança múltipla via @ISA ou roles de Moose/Moo, os atributos do objeto composto final saem; a gente não tenta reconstruir o grafo de herança em XML.

Meu código é armazenado?

Seu código vai pro backend pra conversão e não fica salvo — a gente não loga o payload. Se o Perl é sensível (credenciais em literais, URLs internas), dê uma revisada rápida antes de colar, como faria em qualquer ferramenta online.

E se o Perl usa refs de subroutine ou tie?

Refs de código e variáveis tied saem como elementos vazios em vez de quebrarem a conversão inteira. A parte de dados da sua estrutura continua passando. Se o código em si tem erros de sintaxe, conserte os óbvios primeiro pro parser ter algo limpo com que trabalhar.

Outras ferramentas que podem ajudar

Perl para XML é uma peça do quebra-cabeça. Essas ferramentas combinam bem: