On Wed, 8 Dec 2004 08:19:17 -0800, Larry Wall <[EMAIL PROTECTED]> wrote: > / $<bar> := [ (<?ident>) = (\N+) ]* /
You know, to be honest I don't know that I want rules in one-liners to capture by default. I certainly want them to capture in rules, though. > And people would have to get used to seeing ? as non-capturing assertions: > > <?before ...> > <?after ...> > <?ws> > <?sp> > <?null> > > This has a rather Ruby-esque "I am a boolean" feeling to it. I think > I like it. It's pretty easy to type, at least on my keyboard. I like it. It reads to me as "if before ...", "if null". Sounds good. > I think I'm leaning toward the idea that anything in angles that > begins alpha is a capture to just the alpha part, so the ? prefix is > merely a no-op that happens to make the assertion not start with an > alpha. Interestingly, that gives these implicit bindings: > > <after ...> $<after> $` > <before ...> $<before> $' Again, I don't see the utility of that in a one-liner. In a grammar, you would create a real rule which would assert <after ...> and capture the result in a reasonable name. > Anyway, that's where I am this week/day/hour/minute/second. I'm thinking capturing rules should be default in rules, where they're downright useful. Your hour/minute/second comment brings up parsing ISO time: grammar ISO8601::DateTime { rule year { \d<4> } rule month { \d<2> } rule day { \d<2> } rule hour { \d<2> } rule minute { \d<2> } rule second { \d<2> } rule fraction { \d+ } rule date { <year> -? <month> -? <day> } rule time { <hour> \:? <minute> \:? <second> [\. <fraction>]? } rule datetime { <date> T <time> } } For a grammar, that works perfectly! In a one-liner, I'd rather just use: $datetime ~~ /$year := (\d+) -? $month := (\d+) -? ...../ and specify the vars I want to save directly in my own scope. Ashley Winters