> 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]

Reply via email to