On Thu, May 12, 2005 at 12:53:46PM -0400, Aaron Sherman wrote: > My take, based on S05: > > > In other words, it acts as though one had written > > > > $rule = rx :w / plane ::: (\d+) | train ::: (\w+) | auto ::: (\S+) / ; > > > > and not > > > > $rule = rx :w /[ plane :: (\d+) | train :: (\w+) | auto :: (\S+) ]/ ; > > Your two examples fail in the same way because of the fact that the > group IS the whole rule.
False. In the first case the group is the whole rule. In the second case the group would not include the (implied) '.*?' at the start of the rule. Perhaps it helps to see the difference if I write it this way: $rule = rx :w /<null>[ plane :: (\d+) | train :: (\w+) | auto :: (\S+) ]/; Note that the rule is *unanchored*, thus it tries at the first character, if it fails then it goes to the second character, if that fails it goes to the third, etc. Thus, given: $rule1 = rx :w / plane ::: (\d+) | train ::: (\w+) | auto ::: (\S+) / ; $rule2 = rx :w /<null>[ plane :: (\d+) | train :: (\w+) | auto :: (\S+) ]/ ; "travel by plane jet train tgv today" ~~ $rule1; # fails "travel by plane jet train tgv today" ~~ $rule2; # matches "train tgv" They're not equivalent. > > Next on my list, S05 says "It is illegal to use :: outside of > > an alternation", but A05 has > > > > /[:w::foo bar]/ > > I can't even figure out what that means. :w turns on word mode > (lexically scoped per S05) and "::" is a group-level commit. What are we > committing exactly? Looks like a noop to me, which actually might not be > so bad. Yes, the point is that it's a no-op, because /[:wfoo bar:]/ is something entirely different. > > /[:w\bfoo bar]/ # not exactly the same as above > > No, I think that's exactly the same. Nope. Consider: $foo = rx /[:w::foo bar]/ $baz = rx /[:w\bfoo bar]/ "myfoo bar" ~~ $foo # matches "myfoo bar" ~~ $baz # fails, foo is not on a word boundary Pm