> Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm
> Date: Sat, 18 Jan 2003 15:07:56 -0800 (PST)
> From: "Sean O'Rourke" <[EMAIL PROTECTED]>
> Cc: Damian Conway <[EMAIL PROTECTED]>,
>       "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
> X-SMTPD: qpsmtpd/0.20, http://develooper.com/code/qpsmtpd/
> 
> On Sat, 18 Jan 2003, Michael Lazzaro wrote:
> > So 'if' and friends are just (native) subroutines with prototypes like:
> >
> >    sub if (bool $c, Code $if_block) {...};
> 
> IIRC it's not that pretty, unfortunately, if you want to support this:
> 
>     if $test1 {
>       # blah
>     } elsunless $test2 {
>       # ...
>     }

Ahh, you used the unmentionable _correctly_, unlike so many who
misunderstood some six months ago.

> since that gets parsed as
> 
>     if($test1, { ... }) # aiee: too many arguments to "if"

That is not a problem:

  # We'll just pretend that dereferencing the "undef" sub does nothing

  sub if ($test, &block; &follow) {
    # ... er, how do you write "if"? Hmm...
    $test ?? block() :: follow()
  }

  sub elsunless ($test, &block; &follow) {
    !$test ?? block() :: follow() 
  }

So:

  if $test1 { 
    # stuff
  }
  elsunless $test2 {
    # stuff 2
  }

Becomes (semantically):

  if($test1, {
    # stuff
  }, elsunless($test2, {
    # stuff 2
  }));

Luke

Reply via email to