> 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 <blockname>
> deactivate <blockname>
> 
>       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;
    }

Reply via email to