On Mon, Jul 01, 2002 at 02:52:06PM -0500, Me wrote:
> Current p6 rx syntax aiui regarding embedded code:
> 
>     /
>     #1 do (may include an explicit fail):
>     { code }
> 
>     #2 do with implicit 'or fail'
>     <( code )>
> 
>     #3 interp lit:
>     $( { code } )
> 
>     #4 interp as rx:
>     <{ code }>
>     /
> 
> This feels cryptic. Do we need abbreviated syntax for
> all these cases? If we do, is there a better syntax for
> this stuff?

They're not entirely cryptic, it's just a new set of mnemonics. I don't
think anyone would argue against C< {...} > as the most recognizable
flag for "code" possible, which makes it the best choice for the most
ordinary case. 

C<< <...> >> are assertions, so it makes sense that #2 and #4 use that
syntax. Their contents will either match (for their own definition of
"match") or not, and the results are just as if you'd used a simple
assertion like C<< <alpha> >> in the same position. 

The parens in #3, C<< <( code )> >>, make sense if you think of 
C< ( condition ) > as a kind of shorthand for C< if ( condition ) >. The
combination of "assert" and "condition" is a nice symbology for:

        { fail unless ( condition ); }

The curly-braces in #4 make sense because it's executing code to get a
return value (which is more what we would expect from a block than just
getting a "truth" value). Think of it as analogous to C<< <$pat> >>,
only the value of $pat is returned instead of pre-existing within a
variable.

And, C< $( code ) > fits nicely with the general (non-regex) syntax for
interpolating a scalar expression.

Allison

Reply via email to