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.