There are really occassions when you want the order preserved. Consider the following snippet for XML special character conversion. You can now say:
tie (%escape_symbols, Tie::IxHash,
qq (&) => '&',
qq (\042) => '"',
qq (>) => '>',
qq (<) => '<'
Imagine using these key,value pairs in a regex for substitution. Here the order is vital, as the & signs needs to be replaced first, otherwise your routine might clobber over the & symbols you use for the other replacements!
Neat and simple package, that does exactly what it says it will do.
It seemed like a great package at the time, but I had to abandon it for several reasons, most of which have to do with lack of control.
It started when I wanted to add a <dc:creator> element. For that, you need to be able to declare extra namespaces in your <rss version ..> declaration, like xmlns:dc="purl.org/dc/elements/1.1/". This module gives you no control over that.
Then there's the whole CDATA issue. If you want your RSS feed to validate, you will going to have to be able to enclose portions of your content in CDATA tags (like, say, image links in an item's description element). XML:RSS has no support for any control over how to interpret/not to interpret your content: it just rigorously tries to escape/encode everything. An option to take in your content raw, like descriptionRAW =>, for instance, would have been needed to accommodate this need. But it's absent.
So, eventually, you'll wind up with an RSS feed that won't validate (unless you do something extremely 'plain' in your feed). It's ease of use is a plus: you whip out a feed in no time (even though the documentation really leaves to be desired). But, on the whole, this package offers not enough control to get things just right (right enough, at least, for you to generate feeds that will fully validate).