> cleverness and hacks often makes code hard
> to debug or read particularly when programs grow.

I was really just showing that it could be done.  The next step would be to
package the subroutine up as a library so that is can be reused.  This has
been done before in module like Error that gives you constructs that look
like typical try/catch/finally.  And once it is packaged, and deemed stable,
you never have to worry about it again.  Just think how often you use a
module, and never question that it is working correctly.

> i'm not searching a way to solve a single
> problem but trying to make programming easier.

This is what packaging up the functionality will do.  A quick search on CPAN
shows several specialized loop constructs that are designed to make
programming easier:

IfLoop - mixes if and for syntax
Proc::ParallelLoop - loop in parallel
Loop - for loops with added value

Why not add another loop construct module?  ...In fact, I challenge you to
do so. :)

> If loops returned values it would make the
> whole coding much clearlier and better
> structured - at least i believe so.

It sounds like what you are after is to modify the current loop constructs.
The issue there is that returning a value for all loops requires extra
overhead.  Since most users won't want anything returned from a loop you end
up just wasting some CPU time.  Sure, you might argue that a few CPU cycles
won't hurt anyone... but what about the next thing someone wants added, and
the next, and the next.  I would expect the users that would use such a
construct would be few, especially since it isn't a common paradigm, so I
think it is better suited as an extension as opposed to a built-in.

Rob

-----Original Message-----
From: Ville Jungman [mailto:[EMAIL PROTECTED]
Sent: Thursday, September 25, 2003 10:18 PM
To: Hanson, Rob; [EMAIL PROTECTED]
Subject: RE: Should loops return a value?


>From: "Hanson, Rob" <[EMAIL PROTECTED]>
>If you really want a loop to return something, you can roll your own, even
>in Perl 5... but the syntax won't be as you gave.

Ye - i'm not searching a way to solve a single problem but trying to make 
programming easier. If loops returned values it would make the whole coding 
much clearlier and better structured - at least i believe so. It'd b easy to

just watch a code and say what it's doing in many cases. Look at what You 
write below; it is of course clever code but cleverness and hacks often 
makes code hard to debug or read particularly when programs grow.

Yours,
---
Ville Jungman

>How is this?  The only difference is that you need to put the array to loop
>over after the code.  it's close though.
>
>sub loop (&@);
>
>my @x = (1,3,5,7);
>my @y = loop {
>   return $_[0]."a" if $_[0] > 4;
>} @x;
>
>print "@y";
>
>
>sub loop (&@) {
>   my $sub = shift;
>   my @ret;
>
>   foreach (@_) {
>     my $val = &$sub($_);
>     push @ret, $val if $val;
>   }
>
>   return @ret;
>}
>
>Rob
>
>
>-----Original Message-----
>From: Ville Jungman [mailto:[EMAIL PROTECTED]
>Sent: Thursday, September 25, 2003 9:36 PM
>To: Hanson, Rob; [EMAIL PROTECTED]
>Subject: RE: Should loops return a value?
>
>
>Rob, did You read my message at all :-) ?
>
>i just was wandering if there _could_ be more readable way to do this.
>Andnot only for to be readable. If loops (and maybe some other builtin
>commands, too - we are not talking only about whiles and for's) returned
>values, programming might be a way different because you could combine 
>loops
>
>with for example those greps and maps. Consider really what would be
>possible to do with this (maybe look at those examples again, too, to get
>the idea). Also You can not do everything with grep and map and on the 
>other
>
>hand they are not very fast to read or debug when comparizing with this.
>
>i've _always_ wanted to have a program language where loop-commands could
>return whatever is needed. It might be that someday i have to write such
>language or make a fast poor implementation. If this ability would be
>implemented wisely to perl (or to some other language), it wouldn't even
>affect to performance (ok, maybe little bit). But it'd bring much power
>because You could have more control, readibility and straightforwardity in
>Your code - and maybe more speed in some circumstances, too.
>
>Kindly, Ville Jungman
>
> >From: "Hanson, Rob" <[EMAIL PROTECTED]>
> >@values = (1,3,5,7);
> >@bigger_than_4 = map {$_.'a'} grep {$_>4} @values;
> >print "@bigger_than_4";
> > > You need to escape a loop with a value.
> >
> >Not sure I understand what you are trying to accomplish, but this is the
> >equivalent of your Perl version and is as short as your proposed syntax.
> >
> >while (<FH>) {
> >   next unless /stop/;
> >   #somthing
> >   last;
> >}
> >
> >Rob
> >
> >
> >-----Original Message-----
> >From: Ville Jungman [mailto:[EMAIL PROTECTED]
> >Sent: Thursday, September 25, 2003 8:25 PM
> >To: [EMAIL PROTECTED]
> >Subject: Should loops return a value?
> >
> >
> >Shortly, I think it might be good if loops (etc.) could return values.
> >
> >
> >
> >Example 1: Retnext (like 'return next' borrowed from pl/sql)
> >You want to extract numbers from an array if they are > 4 and put an
> >'a'-letter after them.
> >
> >    @values=(1,3,5,7);
> >    @bigger_than_4=                           # get an array from loop
> >       foreach $value(@values) {
> >          retnext $value."a" if $value > 4;   # return value from loop if

> >
>
> >4
> >       }
> >    ;
> >
> >
> >
> >Example 2: Retlast (== perl 'last'-command with a value)
> >
> >You need to escape a loop with a value. Familiar way:
> >
> >    while(<FH>){
> >       if(/stop/){
> >          $array_terminated='true';
> >          last;
> >       }
> >    }
> >    if($array_terminated){
> >       # something
> >    }
> >
> >This could be written as:
> >
> >    if(
> >       while(<FH>){
> >          retlast if /stop/;                  # returns $_ by default
> >       }
> >    ){
> >       # something
> >    }
> >
> >
> >
> >So, not very conserverite but think what all you could do with this.
> >And please, let me know what you think about this. Crap?
> >
> >---
> >
> >ville jungman, 2 laureston crescent, tower, blarney, cork, ireland
> >tel. + 353 - 21 - 451 6847, http://www.kolumbus.fi/vilmak
> >usko Herraan Jeesukseen, niin sinä pelastut. (apt. 16:31)
> >
> >_________________________________________________________________
> >Add photos to your messages with MSN 8. Get 2 months FREE*.
> >http://join.msn.com/?page=features/featuredemail
> >
> >
> >--
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >--
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
>_________________________________________________________________
>MSN 8 helps eliminate e-mail viruses. Get 2 months FREE*.
>http://join.msn.com/?page=features/virus

_________________________________________________________________
The new MSN 8: advanced junk mail protection and 2 months FREE* 
http://join.msn.com/?page=features/junkmail

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to