in reply to Teaching Regular Expression Pattern Matching
Consider also including tools such as Parse::RecDescent.
Many tasks involve regular expressions (as this module of course does), but are best-described using a more complex logical structure of which “regular expressions” are simply a primitive-part. Sometimes the task involves considering among multiple alternatives, such that you need to “back up and try another alternative.” That is what Parsers do, and this one happens to be a very good one.