I know why the following doesn't work:
given $food {
when Pizza | Lazagna { .eat }
when .caloric_value > $doctors_orders { warn "no, no no" }
# ...
}
The expression in the second when clause is smart-matched against $food,
not tested for truth like an if. So currently the right way to code this is
something like
DINER: given $food {
when Pizza | Lazagna { .eat }
if .caloric_value > $doctors_orders { warn "no, no no"; leave DINER }
# ...
}
(Or whatever the way to address labels is.)
I'm a little bothered that this is consistent but (to me, at least)
unintuitive. Testing methods on the topic is something people may want
to do often: is there a way to hide away the control logic? I'm tempted
to propose that when a ".method" is seen in the when expression, the
whole thing should become a terminal if. Inconsistent but possibly what
people want.
--
Gaal Yahas <[EMAIL PROTECTED]>
http://gaal.livejournal.com/