use XML::Simple; my $xs = XML::Simple->new( ForceArray => 1, KeepRoot => 1, NoAttr => 1, KeyAttr => [] ); my $data = { 'Things' => { 'Thing' => [] } }; ... push @{ $data->{Things}->{Thing} }, { 'Item' => $var1, 'Number' => $var2, 'Details' => { 'Detail' => { 'Color' => $var3 } }, }; ... push @{ $data->{Things}->{Thing} }, { 'AdditionalInfo' => { 'Info' => $var4, 'Stuff' => $var5, 'MoreDetails' => { 'ExtraColor' => $var6 } } };