Hi Jim,

Well, instead of asking at each step, whether the last element is processed
or not, it's slightly better to exclude it from the loop:

for my $i (0..$#keyFields - 1) {
  printf "%s %s", $keyFields[$i], $match;
}
printf "%s %s", $keyFields[-1], $lastmatch;

But yes, I guess your last approach is just what the doctor ordered in this
case. ) I'd use a map, though:

print join ' AND ', map { "$_ GE 0" } @keyFields;

.. as, again, it'd be slightly more efficient to allocate the space for the
resulting array just once.

-- iD

2012/2/15 Jim Gibson <jimsgib...@gmail.com>

> At 9:08 PM -0700 2/14/12, Chris Stinemetz wrote:
>
>> I have a for loop I would like to alter so that when the iteration
>> reaches the last element in the array the varibale $lastmatch is
>> passed to printf instead of $match.
>>
>> Does anyone have any suggestions?
>>
>> my $match = "GE 0 AND ";
>> my $lastmatch = "GE 0";
>>
>> for my $i (0 .. $#keyFields) {
>>  printf "%s %s", $keyFields[$i], $match,;
>> }
>>
>
> There are several approaches:
>
> 1.
>
>
> for my $i (0 .. $#keyFields) {
>  printf "%s %s", $keyFields[$i], ($i<$#keyFields?$match:$**lastmatch);
> }
>
> 2.
>
>
> for my $i (0 .. $#keyFields) {
>  if( $i == $#keyFields ) {
>    printf "%s %s", $keyFields[$i], $lastmatch;
>  }else{
>    printf "%s %s", $keyFields[$i], $match;
>  }
> }
>
> 3.
>
> my @output;
> for my $field (@keyFields) {
>  push( @output, sprintf("%s GE O ",$field);
> }
> print join("AND",@output);
>
>
>
> --
> Jim Gibson
> j...@gibson.org
>
>
> --
> To unsubscribe, e-mail: beginners-unsubscr...@perl.org
> For additional commands, e-mail: beginners-h...@perl.org
> http://learn.perl.org/
>
>
>

Reply via email to