Ville Jungman wrote:
>
> 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
> }
> ;
$ perl -le'
@values = qw/ 1 3 5 7 /;
@bigger_than_4 = grep { ( $_ = "${_}a" ) > 4 } @values;
print for @bigger_than_4;
'
5a
7a
And of course if you have warnings enabled (which you should) you can do
it like this:
@bigger_than_4 = do { no warnings 'numeric'; grep { ( $_ = "${_}a" ) > 4
} @values };
> 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?
The value in $_ is not local to the while loop so that if you exit the
loop early with last, the value in $_ outside the loop will still be the
last value from inside the while loop.
while ( <FH> ) {
last if /stop/; # $_ contains "stop that!\n"
}
print; # will print "stop that!\n"
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]