I would echo the sentiment that, if you are dealing with an XML document, you should use one of the many tools that are expressly designed to do that. (XML::LibXML and XML::Twig are my personal favorites.)
If you are trying to construct a “customized” XML output based on an XML input that you don’t want to have to be terribly “smart” about, then perhaps a general-purpose templating system would be useful. Template::Tutorial::Datafile is a really good discussion of this notion. Here, the application program is not specific, not at all, to what it is producing as an output ... it’s just taking its output directly from its input ... but the input file is made to use standard templating constructions.