Conversor de Perl a XML
Pega paquetes Perl o estructuras de datos. Recibe XML limpio.
Qué hace esta herramienta
Si mantienes Perl que alimenta XML a cualquier sistema — un servicio SOAP antiguo, una configuración basada en XML, una integración de CPAN — ya conoces el ritual: use XML::Simple, pelear con ForceArray y KeyAttr, armar una ref a hash a mano y cruzar los dedos para que la salida sea lo que el consumidor espera. Pega el Perl aquí y recibe XML bien formado de una sola pasada: un objeto blessed, una ref a hash plano o un paquete completo con constructor y accesores.
El conversor lee los patrones OO habituales de Perl con limpieza. Un constructor que hace bless $self, $class con una ref a hash se vuelve un elemento XML cuyos hijos reflejan las claves del hash. Las refs a array se convierten en elementos contenedores con un hijo por entrada (con el nombre en forma singular de la clave, así que items => [...] se vuelve <items><item/>...</items>). Las refs a hash anidadas se convierten en elementos anidados. undef se vuelve un elemento vacío en lugar de descartarse, así que la forma coincide con lo que XML::Simple o XML::LibXML darían en un round-trip.
Puedes pegar varios bloques package a la vez — package Order; package OrderItem; package Address; — y cada uno sale con sus campos asignados por el constructor expandidos. Las estructuras de datos planas (no OO) también funcionan: mete my $data = { ... }; y la herramienta recorre las refs, conservando las claves del hash como nombres de elementos. Para las reglas más profundas de Perl detrás de todo esto, el perldoc oficial es la referencia.
Cómo se usa
Tres pasos. Funciona igual tanto si pegas un paquete de diez líneas como un módulo completo con helpers.
Pega tu Perl (o carga el ejemplo)
Suelta el código en el editor de la izquierda tal cual. Un package con constructor, una ref a hash plana, paquetes anidados o una mezcla: todo vale. Pulsa Cargar ejemplo para ver un caso realista primero.
No hace falta quitar use strict;, use warnings; ni tu lista de require. Deja el código como está en tu editor. Solo pégalo.
Pulsa Convertir
Haz clic en el botón verde Convertir. La herramienta lee las declaraciones de paquete, resuelve las referencias blessed y construye el XML en una pasada. Verás un indicador de carga corto mientras trabaja.
Copia el XML
El panel de la derecha se llena con XML bien formado e indentado que cualquier parser conforme al estándar aceptará. Cópialo directamente a tu flujo de CPAN, a una integración SOAP heredada, a un archivo de configuración en XML o a un fixture de test.
Cuándo viene bien en serio
Alimentar XML::LibXML o XML::Simple
Tienes una estructura de datos Perl y quieres ver exactamente qué pinta tiene como XML antes de cablear <code>XMLout</code> / <code>XML::LibXML::Document</code>. Pega, convierte, copia, compara.
Integración con sistemas heredados
Una integración basada en CPAN todavía espera SOAP 1.1 o un formato XML a medida. Pega tu representación Perl y obtén un cuerpo realista para pasar a SoapUI o a curl.
Migrar fuera de Perl
¿Reemplazas un viejo servicio en Perl por algo distinto? Exporta la forma de los datos como XML primero: es el terreno neutral para portar a Python, Java o C#.
Documentación que encaje con el código
Genera ejemplos XML para el README de un módulo de <a href="https://metacpan.org/" target="_blank" rel="noopener">MetaCPAN</a> o para un wiki interno directamente desde tus paquetes reales, para que los docs no se desfasen.
Preguntas frecuentes
¿Puedo pegar varios paquetes a la vez?
Sí: pega un .pm entero o varios bloques package apilados. Cada paquete sale con sus claves de hash asignadas por el constructor expandidas y las refs a objetos anidados resueltas. Si Order tiene una ref a array de objetos OrderItem y una ref a hash shipping_address, los tres aparecen en la salida.
¿Cómo maneja undef y las claves ausentes?
Una clave cuyo valor es undef se vuelve un elemento vacío para que la forma del XML se mantenga estable entre instancias. Las claves que no están en el hash se omiten. Las refs a array con arrays vacíos se vuelven elementos contenedores vacíos (<items></items>) en lugar de descartarse.
¿Refs a array y refs a hash funcionan igual?
Una ref a array se vuelve un elemento contenedor con un hijo por entrada; por defecto el tag hijo es la forma singular de la clave (así que items => [...] da <items><item/>...</items>). Una ref a hash se vuelve un elemento anidado cuyos hijos reflejan las claves. Las refs mixtas (array de refs a hash, hash de arrays) se anidan igual de forma recursiva.
¿Y las referencias blessed y la herencia múltiple?
Las referencias blessed conservan disponible su nombre de clase: puede usarse como tag del elemento cuando tiene sentido. Para herencia múltiple vía @ISA o roles Moose/Moo, los atributos del objeto compuesto final aparecen; no intentamos reconstruir el grafo de herencia en XML.
¿Se guarda mi código?
Tu código se envía al backend para la conversión y no se persiste: no registramos el payload. Si el Perl es sensible (credenciales en literales, URLs internas), dale un repaso rápido antes de pegarlo, como con cualquier herramienta online.
¿Qué pasa si el Perl usa refs a subrutinas o tie?
Las refs a código y las variables tied se emiten como elementos vacíos en lugar de hacer fallar toda la conversión. La parte de datos de tu estructura sigue saliendo. Si el código tiene errores de sintaxis, arregla los obvios primero para que el parser tenga algo limpio con lo que trabajar.
Otras herramientas que te pueden hacer falta
Perl a XML es una pieza del puzzle. Estas herramientas le van bien al lado: