Actually... Rakudo *does* generally follow interpretation (b):
➜ 'x' ~~ / .* { say '*' } | .? { say '?' } /; # * ➜ 'x' ~~ / .? { say '?' } | .* { say '*' } /; # ? The observed bug is specifically with character classes: ➜ '1' ~~ /<digit> { say 'digit' } | <[0..9]> { say '0..9' } /; # 0..9 ➜ '1' ~~ /<[0..9]> { say '0..9' } | <digit> { say 'digit' } /; # 0..9 Following some more experimentation, here are various atoms for matching the digit '1', sorted into three categories based on how much LTM favors them in current Rakudo: tier 1: '1' tier 2: . \d \w <[0..9]> tier 3: <digits> <alnum> <:Number> <:Decimal> etc. That the literal `1` is preferred over everything else by LTM is to be expected ("longest literal prefix" tie-breaker). However, that the character classes are split into two tiers - with the syntactic ones being preferred over the named and uniprop ones - seems strange. At least I don't see anything in S05 to back that up. http://design.perl6.org/S05.html#Overview says that LTM is transitive through subrules, so even if the named character classes are treated as subrule calls they shouldn't be disfavored, right?