This comes back to the age old, do I code what I can or do I code for whomever may have to maintain this after me. If I bang out a piece of code, I expect that the next person will have a comparable level of experience, be willing to go through the perldocs, or leave the code alone. I tend to shy away from detracting functionality or speed from a code base, due to future maintenance. If they do play with the code, and don't understand what a particular line or block is doing, I expect them to copy the code to another place and examine it there, or deal with breaking the code or other ramifications. I also keep a current/most recent copy of all the code I write in my home directory, just in case I get that phone call "The program is broken.. no we didn't edit it" and diff v1.pl v2.pl produces output. (where to go from there is a different story)
With that said, I'd like to comment on your counterpoints.
If you don't use (?:..|..|..), do you also not use ?!, ?=, ?<, ?>, ?<=, ?>=, ?{}. Its a shame to give up the functionality provided by these idioms, simply due to the fact that they look funny. Worst case a simple # perldoc perlre, would suffice to point the next person in line to the appropriate documentation for those operators.
In terms of my way of collecting a month versus your way. It appears that you didn't actually test the line to see what ends up in $mth, but rather assumed it was the numerical value, which it is not. Its actually the 3 letter abbrev for the current month. Going back to comparable Perl knowledge levels, it's interesting that you called the 1 magical. For me it is a simple powerful feature of perl. Any time parentheses come into play, the context within becomes a LIST (Im pretty sure this is true, though if any monks can think of a situation where this is not true please let me know) With that in mind, a LIST and an array are basically the same (*peers around waiting for the lightning strike*), and can be sliced the same. Here is an example.
my @date = split(/\s+/, localtime);
# note the @date, when using an array slice
my($mth, $date, $year) = @date[1,2,4];
# Versus
my($mth, $date, $year) = ( split(/\s+/, localtime) )[1,2,4];
Both of the lines which assign the values to the scalars, deal with LIST context. The ability to force LIST context on the left or right is an extremely simple and powerful concept, and should be in every perl coder's bag of tricks, along with slices.
One last comment. Yes it is good to provide beginners with a productive way to get something done, it is also good to toss out information that may cause them to have to look at the docs. Lets say I use the (?:blah|foo) construct with the comment of perldoc perlre. If they have a newer version of perl and an older version of the LLama ( as well as the Camel {I checked: some or the ? tokens are talked about briefly on page 68 of Camel 2nd Ed}) book, they will see stuff in that document they would have never known existed, if they relied strictly on the books.
MMMMM... Chocolaty Perl Goodness.....