Larry Wall wrote: > > : In summary: assuming Perl 6 allows user-defined while-ish structures, how > : would it be done? > > I think the secret is to allow easy attachment of regex rules to sub > and parameter declarations. There's little point in re-inventing > regex syntax using declarations. The whole point of making Perl 6 > parse itself with regexes is to make this sort of stuff easy. > > Larry
Ah. I'd been wondering how Damian's sub if (bool $condition, &block); was going to be extended to handle if-else, if-elsif, if-elsif-else, if-elsif-elsif, if-elsif-elsif-else, etc. I *think* what you're saying is that user defined while-ish and if-ish constructs should really be created by altering the Perl 6 parser at compile time. Of course, that's not really news: you already said that in Apocalypse N (for some value of N (I'm to lazy to determine which, since it doesn't matter (and besides, laziness is one of my cardinal virtues :-) (parse *that* if you can -- don't smileys just play havoc with parenthesis-counting?)))). I was provoked to ask my question about C<while> by Damian's message which said, in part: > So C<if>'s signature is: > > sub if (bool $condition, &block); Now, if I'm understanding correctly, *that* turns out not to be the case. Of course, Damian's point was to talk about semicolons after blocks, not C<if> structures in all their glorious complexity. Nonetheless, the signature of C<if> in Perl 6 will have to be more complicated than that, or it wouldn't be able to handle zero-or-more elsif's and zero-or-one else's. Again quoting Damian: > Likewise I could write my own C<perhaps> subroutine: > > sub perhaps (bool $condition, num $probability, &block) { This, on the other hand, would be true. The simplicity of this hypothetical control structure makes it possible to use the built-in syntactic features of Perl 6 (especially the rules concerning blocks and how they interact with commas and semicolons), so it wouldn't be necessary to extend the grammar to implement C<perhaps>. Am I getting this straight? =thom