Addressing your first question, I can not think of a way to perform the multiple replacements you require using a single substitution operator without using a hash. However, Lingua::EN::Numericalize seems to be relevant to your question.
Comment on Re: Substitution with multiple options for capture and replace.