use XML::Simple; my $xs = XML::Simple->new( ForceArray => 1, KeepRoot => 1, NoAttr => 1 ); my $data = { 'Things' => { 'Thing' => [] } }; ... push @{ $data->{Things}->{Thing} }, { 'Item' => $var1, 'Number' => $var2, 'Details' => { 'Detail' => { 'Color' => $var3 } } }; ... my $xml = $xs->XMLout($data); print $xml;