in reply to Translation for Perl for Fun and Profit
(Can’t see what the fuss was about, there ...)
Anyhow: named parameters are definitely the best way to go when dealing with translations. You also want to be aware of issues such as the use of “a” vs. “an” in the English language: generally better to just let the message read “slightly stilted” in every language.
I would also suggest considering the idea of preparing one Perl package which generates common messages ... especially the ones with the more interesting substitutions, and the ones that might be used many times. It can be helpful (and it can save costs) for there to be just one location in the code where those non-trivial and frequently-used messages are actually produced.
If the message occurs as a result of an exception condition, defining an exception object, throwing it, and generating the message-text within the exception handler can be a very useful strategy. It also entirely bypasses the conventional (but non-L10n-able) practice of identifying thrown errors by examination of a string.