Sean O'Rourke wrote:

> 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.

Any subroutine/function like C<if> that has a signature (parameter list)
that ends in a C<&sub> argument can be parsed without the trailing
semicolon. So C<if>'s signature is:

        sub if (bool $condition, &block);

So the trailing semicolon isn't required.

Likewise I could write my own C<perhaps> subroutine:

        sub perhaps (bool $condition, num $probability, &block) {
            return unless $condition;
            return unless $probability > rand;
            $block();
        }

and then code:

        perhaps $x<$y, 0.25 { print "Happened to be less than\n"}
        perhaps $x>$y, 0.50 { print "Happened to be greater than\n"}

without the trailing semicolons.

Damian

Reply via email to