> Rob, did You read my message at all :-) ? I'm not telling. :P
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. 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 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]