Some feedback.
> Syntax Overview
>
> Keywords
> continue, do, else, elsif, for, foreach, given, goto, grep, if, last,
> map, next, redo, sort, sub, unless, until, when, while
C<try> and C<catch>
(C<finally> is not nearly so certain.)
> Conditional Statement Modifiers
>
> 6. [ LABEL: ] expr if expr;
> 7. [ LABEL: ] expr unless expr;
I'm not at all sure modifiers will be stackable, as this grammar implies.
> Iterative Block Constructs
>
> 20. [ LABEL: ] for[each] [ scalar ] ( list ) { block } # Note 4
I am hoping that Larry will also give us:
[ LABEL: ] for[each] (scalar, scalar ...) ( list ) { block }
> Subroutine Code Blocks # Note 6
>
> 21. sub identifier [ ( prototype ) ] [ :properties ] { block }
> 22. sub [ ( prototype ) ] { block } # Note 7
Currently:
21. sub identifier [ ( prototype ) ] [ is properties ] { block }
22. sub [ ( prototype ) ] [ is properties] { block } [is properties]
Though I would *much* prefer to see:
21. sub identifier [ ( prototype ) ] [ :traits ] { block }
22. sub [ ( prototype ) ] [ :traits] { block } [is properties]
> A list consists of zero or more expressions. List members may
> either be an explicit expression, separated via a comma (','), or
> may be interpolated from two expressions via either of the two
> range operators ( ('..') and ('...') ). A list of zero elements
> must be delimited by parenthesis.
May also have a redundant comma after the last element.
> A statement consists of zero or more expressions, followed by an optional
> modifier and its expression, and either a statement terminator (';') or a
> block closure ('}' or EOF).
Need to recast this in terms of statement separators and null statements.
> A block consists of zero or more blocks and statements. A file is
> considered a block, delimited by the file boundaries. Semantically, I
> will define a block only in terms of its affect on scoping.
<PEDANT>
"its effect on scoping"
(we probably don't care about its pyschological demeanor ;-)
</PEDANT>
Damian