On Tue, 27 Aug 2002, Sean O'Rourke wrote:

> On Tue, 27 Aug 2002, Luke Palmer wrote:
> > On 27 Aug 2002, Piers Cawley wrote:
> > > Damian Conway <[EMAIL PROTECTED]> writes:
> > > > Debbie Pickett asked:
> > > > > (Offtopic: can I say:
> > > > >   $c = -> $xyz { mumble }
> > > >
> > > > Yes. Though you need a semicolon at the end unless its the last
> > > > statement in a block.
> > >
> > > Um... when did that rule come in? I thought a statement ending closing
> > > brace merely had to match C<< rx/ \} [ ; | \s* \n] / >>.
> >
> > Nope. It's C< rx/^^ \s* \} \s* $$/ > (or the usual C< }; >)
> 
> I hope this is wrong, because if not, it breaks this:
> 
>     if 1 { do something }
>     foo $x;
> 
> in weird ways.  Namely, it gets parsed as:
> 
>     if(1, sub { do something }, foo($x));
> 
> which comes out as "wrong number of arguments to `if'", which is just
> strange.

No, it's right. But it doesn't break that. In the grammar, C-like 
languages include (something like):

        statement: expression ';'
        statement: if expression block

So an if _statement_ terminates itself.  The } on a line of its own is a 
special exception for closing braces that would also need a semincolon, 
as in C<eval> (that is, C<try>), et cetera.

Luke

Reply via email to