in reply to Re: Starting foreach at an arbitrary position
in thread Starting foreach at an arbitrary position
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... :-)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Re: Starting foreach at an arbitrary position
by BrowserUk (Patriarch) on Jan 17, 2003 at 08:30 UTC | |
by MarkM (Curate) on Jan 17, 2003 at 22:06 UTC | |
by BrowserUk (Patriarch) on Jan 17, 2003 at 23:53 UTC |