On Fri, Nov 15, 2002 at 07:05:26AM +1100, Timothy S. Nelson wrote:
> --------------------------------------------------------------
> given ($this) {
>       when $that_happens { "Have a party" }
>       when $that_doesnt_happen { "Sing" }
>       all {
>               # Do something
>       }
>       any {
>               # Do something else
>       }
>       some {
>               # Do something other
>       }
>       none {
>               # Do something however
>       }
> }
> --------------------------------------------------------------

So, I was all set to show how this could work with junctions, but then
I realized that I don't understand them well enough, so here's what I
came up with:

        $j0 = $that_happens | $that_doesnt_happen;
        $j1 = !$that_happens | !$that_doesnt_happen;
        given ($this) {
           when $j0 ~~ $that_happens { ... }
           when $j0 ~~ $that_doesnt_happen { ... }
           when all($j0) { ... }
           when any($j0) { ... }
           when any($j1) { ... }                # "some" Rare, I expect
           when none($j0) { ... }
        }

Is that right?  Is there a better way?  What happens when there's a
junction on either side of a smart match?

>       The basic idea is that you have two "special" variables which I will, 
> just for now, call $truecount and $falsecount.  Basically, every time one of 
> the "when" clauses comes up true, it increments truecount; whenever one comes 
> up false, it increments $falsecount.  The blocks below the given get evaluated 
> under the following conditions
> 
> all: $falsecount == 0
> any: $truecount > 0
> some: $falsecount > 0
> none: $truecount == 0

-Scott
-- 
Jonathan Scott Duff
[EMAIL PROTECTED]

Reply via email to