I must strongly disagree that XML::Smart is a good idea, unless your needs are trivial — it is one of the buggiest Perl XML handlers I have had the misfortune to attempt to use. The mere act of setting one element equal to another caused some of the methods to stop working after the assignment. I wish I could provide a more concrete example, but I nuked the code I was testing with after I gave up on making it work reliably.