This is awesome! I need to upgrade my regex knowledge, but I've got most of what is going on at least within my range of comprehension. Is plan part of Test::More, or does Test::More have a depedency to Test::Block? Also, it appears that the %testcase hash is not required, you just used it for illustration - that is to say that only the keys are needed, I wouldn't need to decide ahead of time if the value is expected to be valid? I have some more tinkering to do, I need to look more closely at the $rx assignment. Thanks again.
Well, first of all, all that's necessary is the @tier array and the code generating the regex. All the rest is plumbing which I dropped in there to make sure that the regex does indeed do what it's supposed to do.
There's no Test::Block module on my machine. plan() is a function of Test::More which takes the number of tests that will be run — since I use key in scalar context (forced by the + 0), it returns the number of keys in the hash, which is the number of tests I'll be running. The %testcase hash is makes adding tests easier, and of course, if I want to test whether the regex works correctly, then I must decide ahead of time what result it is supposed to produce.
But again, nothing besides the @tier array and the code generating the regex is necessary. I just added all of the testing bits because that code wasn't easy to get right immediately, so I wanted to make sure it behaves as it is supposed to.