> Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm
> Date: Fri, 15 Nov 2002 07:46:21 +1100 (EST)
> From: "Timothy S. Nelson" <[EMAIL PROTECTED]>
> Sender: [EMAIL PROTECTED]
> X-SMTPD: qpsmtpd/0.12, http://develooper.com/code/qpsmtpd/
>
> These are mostly not my ideas (except activate); hopefully not too
> many of them have already been used.
>
> In the same list as "last", "next", and "redo", we should also have
> - deeper (works with nest -- cf. II: loop)
> - yield and resume (for co-routines)
>
> Also useful could be:
> activate
> deactivate
>
> Useful for optimising:
> ---
> $first = 1;
> foreach (@example) {
> if($first) {
> do_something;
> $first = 0;
> } else {
> do_normal_stuff;
> }
> }
> ---
>
> Can be done as:
>
> ---
>
> LABEL: foreach(@example) {
> OTHEREXAMPLE: {
> do_something;
> deactivate OTHEREXAMPLE;
> next LABEL;
> }
> do_normal_stuff;
> }
>
> ---
Also, it could be done as:
for @example { # the foreach keyword has gone away
FIRST {
do_something;
next;
}
do_normal_stuff;
}
Beautiful.
Deactivating blocks, on a more general scale (if you find it useful),
can be achieved because of the new concept of "everything is a
closure":
our bit %inactive;
sub block ($name: &block) {
&block() unless %inactive{$name}
}
sub deactivate ($name) {
%inactive{$name} = 1
}
LABEL: foreach(@example) {
block 'OTHEREXAMPLE': {
do_something;
deactivate 'OTHEREXAMPLE';
next LABEL;
}
do_normal_stuff;
}