Me wrote: > > "given nothing...": > > > > given () { ... } > > do { ... } > > seems simpler.
But doesn't have the same effect. A C<when> inside a C<do> responds to the current value of the "subject" specified by any surrounding topicalizer (i.e. C<given>, C<for>, C<sub>, etc.) > > > Suppose you want to preserve $_ and alias > > > > given $value -> $g { > > '->' seems more visually noisy than it need be in this case. > > Perhaps: > > given $value as $g { ... } > > for @foo as $f { ... } > > But, I can see how > > > for 0 .. Inf; "a" .. "z" x 1000 -> $i; $a { > > for 0 .. Inf; "a" .. "z" x 1000 as $i; $a { > > would be seen as a counterexample by some. Yep. By Larry, for one. And me, for another. ;-) > > KEEP blocks would only be executed if the block succeeded. > > UNDO blocks would only be executed if the block failed. > > What defines success? I sometimes raise exceptions to signal > that I'm done, with success, and it's time to wrap up and go back > to some calling code several levels up the stack. But I guess this > is an unusual case so not being able to use KEEP and UNDO > as intended is OK. Just derive your "successful exception" from Control:: rather that Error:: (or whatever the final standard names are). > Or maybe each block has a Success class exception object > associated with it unless a different exception is raised, and > KEEP is called if the exception isa(Success). Then I can raise > a subclass of Success. Yep. Just s/Success/Control or whatever Larry decides/ Damian