There is nothing wrong with the templating approach, but if you are not familiar with them, you should glance at the many XML modules on CPAN as well.
You could either create the entire xml as needed, or have an xml template that you parse, then just change the values of whatever nodes needed. This may give you more flexibility in some cases.
Example using XML::Twig:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $xml = do { local $/; <DATA>; };
my %data = (
name => 'Billy',
age => 12,
);
my $t = XML::Twig->new(
twig_handlers => {
name => sub { $_->set_text( $data{name} ); },
age => sub { $_->set_text( $data{age} ); },
},
pretty_print => 'indented',
);
$t->parse( $xml );
$t->flush;
__DATA__
<?xml version="1.0" ?>
<root>
<name>THIS CHANGES</name>
<static>blah blah blah</static>
<static>blah blah blah</static>
<age>THIS CHANGES</age>
</root>