Bonus points if you actually explain whySince the OP has not chimed in, I will make an attempt at an explanation.
Probably obvious to most monksI freely admit that it was not obvious to me. I'm glad you prompted me to think about it further.
Here goes. It is a case of modifying an array in a for loop. Before the for loop, the @searchTexts array contains 5 elements (indices: 0-4). The 1st 5 times though the loop, the array size remains constant at 5. Now, let's look at the end condition of the loop:
$i <= @searchTexts +1 -1;
which is just a slightly obfuscated form of:
$i <= @searchTexts;
Since the array is evaluated in scalar context, @searchTexts is the same as scalar @searchTexts, which returns the current size of the array. The 1st 5 times through the loop, the size is 5, and therefore the end condition is satisfied (the 5th time , $i is 4, which is less than or equal to 5). At the end of the 5th time through the loop, $i increments to 5, which is still less than or equal to 5. This causes the loop to be executed a 5th 6th time, which in turn causes the array to grow by 1 because of this line:
@searchTexts[$i] =~ s/^\s+//;
which resolves to this:
@searchTexts[5] =~ s/^\s+//;
From there on, the array continues to grow by one each time through the loop because the end condition is dependent on the array size.
In reply to Re^3: Huge simple problem (reason)
by toolic
in thread Huge simple problem
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |