He first shows a (clunky) example of a Java iterator, then goes on to compare that against a foreach loop, iterating over the keys of a hash. However, then he goes on to say:
In Perl 6 it will even be possible to return a list that expands lazily, so the above [code] will be more efficient than it is now. In Perl 5, the keys list is built completely when I call keys. In the future, the keys list will be built on demand, saving memory in most cases, and time in cases where the loop ends early.
But doesn't Perl 5 violate the "one at a time" definition? I mean, you're not iterating over one element at a time. You're slurping a list, and THEN iterating over that list. This distinction can be important if, for example, you're retrieving a million rows out of a database. That million-element array is now in memory, instead of being fed to you one element at a time.
I also think he's railing on OO a bit by using Java (and statically typed languages in general), and its overly verbose syntax, as his whipping boy. Consider an equivalent Ruby example...
...and suddenly iterators within OO don't seem so stupid