On Mon, May 09, 2005 at 09:14:02AM -0700, Larry Wall wrote:
> : m/ <alt: tea> (don't) (ray) (me) (for) (solar tea), (d'oh!)
> : | <alt: BEM> (every) (green) (BEM) (devours) (faces)
> : /;
>
> This seems like a rather ugly syntax for what is essentially a label,
> or a <null> rule. I wonder if we can come up with something a little
> prettier.
I wonder if it's deserving of much in the way of special syntax at all,
given that we have a variety of ways to do it (closures come to mind).
In the example above, one could just as easily test $1 for "don't" vs.
"every" to figure out which alternation matched. Indeed, a simple answer
is:
m/ $<tea>:=<null> (don't) (ray) (me) (for) (solar tea), (d'oh!)
| $<bem>:=<null> (every) (green) (BEM) (devours) (faces)
/;
and then
if ($/<tea>) { say "I hate solar tea" }
if ($/<bem>) { say "I love bug-eyed monsters" }
But from your examples:
> m/ <null:tea> (don't) (ray) (me) (for) (solar tea), (d'oh!)
> | <null:BEM> (every) (green) (BEM) (devours) (faces)
> /;
Hmm, capturing to $<null> seems odd.
> m/ <tea:=> (don't) (ray) (me) (for) (solar tea), (d'oh!)
> | <BEM:=> (every) (green) (BEM) (devours) (faces)
> /;
Please, not this one -- it looks too much like a subrule call to
tea("=") (from A05).
> m/ <:tea> (don't) (ray) (me) (for) (solar tea), (d'oh!)
> | <:BEM> (every) (green) (BEM) (devours) (faces)
> /;
This one has possibilities. It looks like a generalization of
pair constructors though, so one could also conceivably do things
like <:tea(0)> and <:tea('foo')>. With that one could then write
m/ <:alt('tea')> (don't) (ray) (me) (for) (solar tea), (d'oh!)
| <:alt('BEM')> (every) (green) (BEM) (devours) (faces)
/;
and have
given $<alt> {
when 'tea' { say "I hate solar tea" }
when 'BEM' { say "I love bug-eyed monsters" }
}
> or even plain label syntax:
>
> m/ tea: (don't) (ray) (me) (for) (solar tea), (d'oh!)
> | BEM: (every) (green) (BEM) (devours) (faces)
> /;
>
> if we recognize that : makes no sense as a backtrack control on a
> non-quantified item.
This sounds too "special-case" to me. Also, I think it does make
sense to backtrack control on non-quantified subrules and subpatterns,
so we'd have to say that : has this meaning only after a non-quantified
literal. I feel there are too many other good ways to do it to
add this one.
Pm