use strict; use XML::Simple; local $/; # just so i can slurp __DATA__ my $old_xml = XMLin(,forcearray=>1); my $new_xml; foreach my $heading (@{ $old_xml->{'heading'} }) { my $level = delete $heading->{'level'}; $new_xml->{"heading$level"} = $heading; } print XMLout($new_xml); __DATA__ Introduction to Arguments Specifying Rest Arguments in a Procedure Definition