Sorry, but I gotta put in a couple of comments which are basically subjective and don't realy need discussion. So, just for consideration:
/^pat$/ /^pat\n?$/ # ^ and $ mean string /^pat$/m /^^pat$$/ # no more /m /\A...(^pat$)*...\z/m /^...(^^pat$$)*...$/ # no more \A or \z Poor Huffman coding? Most matches are against a one-line string so it doesn't matter, but it seems like most multi-line matching is done against the beginning/end of a line, rather than the whole string. Also, '^^' and '$$' seem to me to say "really, really the beginning of the beginning" or "end of the end": /^^...(^pat$)*...$$/ The present choices are more consistent with the literal historical definition, so maybe reversing them would be too radical, but then again \A, \Z, \z were introduced to deal with the exceptionalness of matching at the beginning and end of the whole string. (Oh, and "\n?$" may be clearer, but it sure ain't "easy things easy"-er.) (?{ code }) { code } # call code, ignore return { code or fail } # use code as an assertion . . . <{ code }> # call return value as anonymous rule <( code )> # call code as boolean assertion When Damien was explaining this and giving examples, <{ code }> looked much more like { code or fail } and <( code )> looked more like $(code) or (pat). In other words, it seemed like <( code )> would produce a pattern for matching and <{ code }> a result: <{ code }> # call code as boolean assertion <( code )> # call return value as anonymous rule Admittedly, <( code )> doesn't capture (either way) and there may be a deeper consistency which would only become obvious after working with perl6 for a while, but to me it just doesn't scan the way it was given. p