Incolla Perl a sinistra e clicca su "Converti" — lo trasformiamo in XMLIncolla codice Perl

Cosa fa questo strumento

Se mantieni Perl che spinge XML da qualche parte — un vecchio servizio SOAP, una configurazione in XML, un'integrazione via CPAN — conosci la solita trafila: use XML::Simple, lottare con ForceArray e KeyAttr, comporre a mano una ref di hash e sperare che l'output sia quello che il consumer si aspetta. Incolla il Perl qui e ricevi XML ben formato in una passata sola — un oggetto blessed, una semplice ref di hash o un intero package con costruttore e accessor.

Il convertitore legge in modo pulito i pattern OO più comuni di Perl. Un costruttore che fa bless $self, $class con una ref di hash diventa un elemento XML i cui figli rispecchiano le chiavi dell'hash. Le ref di array diventano elementi contenitore con un figlio per entry (il tag figlio è di default la forma singolare della chiave, quindi items => [...] diventa <items><item/>...</items>). Le ref di hash annidate diventano elementi annidati. undef diventa un elemento vuoto invece di sparire, così la forma corrisponde a quella che XML::Simple o XML::LibXML darebbero in un round-trip.

Puoi incollare più blocchi package insieme — package Order; package OrderItem; package Address; — e ognuno esce con i campi assegnati dal costruttore espansi. Funzionano anche le strutture dati non-OO: passa my $data = { ... }; e lo strumento cammina sulle ref, tenendo le chiavi dell'hash come nomi di elemento. Per le regole più profonde di Perl dietro a tutto questo, il perldoc ufficiale è il riferimento.

Come si usa

Tre passaggi. Funziona uguale che tu incolli un package da dieci righe o un modulo completo con gli helper.

1

Incolla il tuo Perl (o carica l'esempio)

Butta il codice nell'editor di sinistra così com'è. Un package con costruttore, una ref di hash semplice, package annidati o un mix — va tutto bene. Clicca Carica esempio per vedere prima un caso realistico.

Non serve togliere use strict;, use warnings; o la tua lista di require. Lascia il codice com'è nel tuo editor. Incollalo e basta.

2

Clicca Converti

Clicca il bottone verde Converti. Lo strumento legge le dichiarazioni di package, risolve le reference blessed e costruisce l'XML in una passata. Durante il lavoro gira un breve indicatore di caricamento.

3

Copia l'XML

Il pannello di destra si riempie di XML ben formato e indentato che qualunque parser conforme allo standard accetta. Copialo direttamente nel tuo flusso CPAN, in un'integrazione SOAP legacy, in un file di config in XML o in una fixture di test.

Quando torna davvero utile

Dare in pasto a XML::LibXML o XML::Simple

Hai una struttura dati Perl e vuoi vedere esattamente che aspetto ha come XML prima di cablare <code>XMLout</code> / <code>XML::LibXML::Document</code>. Incolla, converti, copia, confronta.

Integrazione con sistemi legacy

Un'integrazione basata su CPAN si aspetta ancora SOAP 1.1 o un formato XML su misura. Incolla la tua rappresentazione Perl e ottieni un body realistico da passare a SoapUI o a curl.

Uscire da Perl

Stai sostituendo un vecchio servizio Perl con qualcos'altro? Esporta prima la forma dei dati come XML — è il terreno neutro per portare su Python, Java o C#.

Docs che combaciano col codice

Genera esempi XML per il README di un modulo su <a href="https://metacpan.org/" target="_blank" rel="noopener">MetaCPAN</a> o per un wiki interno direttamente dai tuoi package reali, così la doc non si disallinea.

Domande frequenti

Posso incollare più package insieme?

Sì — incolla un intero file .pm o più blocchi package impilati. Ogni package esce con le sue chiavi di hash assegnate dal costruttore espanse e le ref di oggetti annidati risolte. Se Order tiene una ref di array di oggetti OrderItem e una ref di hash shipping_address, tutti e tre finiscono nell'output.

Come gestisce undef e le chiavi mancanti?

Una chiave con valore undef diventa un elemento vuoto, così la forma dell'XML resta stabile tra istanze. Le chiavi del tutto assenti dall'hash vengono omesse. Le ref di array con array vuoti diventano elementi contenitore vuoti (<items></items>) invece di essere scartate.

Ref di array e ref di hash funzionano allo stesso modo?

Una ref di array diventa un elemento contenitore con un figlio per entry — di default il tag figlio è la forma singolare della chiave (quindi items => [...]<items><item/>...</items>). Una ref di hash diventa un elemento annidato i cui figli rispecchiano le chiavi. Le ref miste (array di ref di hash, hash di array) si annidano allo stesso modo ricorsivamente.

E le reference blessed e l'ereditarietà multipla?

Le reference blessed tengono disponibile il nome della classe — può fare da tag dell'elemento quando ha senso. Per l'ereditarietà multipla via @ISA o ruoli di Moose/Moo, escono gli attributi dell'oggetto finale composto; non proviamo a ricostruire il grafo di ereditarietà in XML.

Il mio codice viene salvato?

Il codice va al backend per la conversione e non viene persistito — non logghiamo il payload. Se il Perl è sensibile (credenziali nei literal, URL interne), dagli un'occhiata veloce prima di incollarlo, come con qualunque strumento online.

E se il Perl usa ref di subroutine o tie?

Le ref di codice e le variabili tied escono come elementi vuoti invece di far fallire tutta la conversione. La parte dati della tua struttura passa comunque. Se il codice ha errori di sintassi, sistema prima quelli ovvi, così il parser ha qualcosa di pulito su cui lavorare.

Altri strumenti che potrebbero servirti

Perl a XML è un pezzo del puzzle. Questi strumenti ci stanno bene accanto: