Your iterator function has a few problems with it.
First, the code does not give the output you suggest. To make your code work properly, the while condition should read:
while (($_) = $iter->()) {
The () around $_ is necessary as $iter->() returns () when the iterator is done.
Second, the code does not allow foreach()-like behaviour. $_ is not aliased to the array element value and does not allow expressions such as the following to have effect: (from the original node)
$_ = uc $_;Third, the range operator ('..') still creates a list that is 1000000 scalars long, and copies this list into the array. Try the following code, and watch your machine quickly die:
$ perl -e 'push(@a, [1 .. 1000000]) while 1'(NOTE: The range operator optimization only applies when used directly from a foreach loop. For example: 'for (1 .. 1000000) { ... }')
All in all, a for(;;) loop with a 'local *_ = \ $array[$i]' is far more effective and efficient... :-)
In reply to Re: Re: Starting foreach at an arbitrary position
by MarkM
in thread Starting foreach at an arbitrary position
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |