in reply to Re^4: self-feeding infinite loop
in thread self-feeding infinite loop

s/index/item being references by your index/

The point wasn't about indexes being numbers or not, it was that modifying an array while iterating over it is dangerous and can lead to cases where it isn't obvious what should be done. In addition useing for or foreach isn't using indexes in an obvious manner so that when using it we seldom think about it as just using an index and counting up to the end of the array. Instead we (me at least) perceive it as moving over the actual values so that if you add or remove values I have no clear idea of what that should do to a for except I certainly expect it to break.

Eric Hodges

Replies are listed 'Best First'.
Re^6: self-feeding infinite loop
by Dominus (Parson) on Aug 20, 2007 at 20:01 UTC
    The point wasn't about indexes being numbers or not...
    Yes, I understood that you had missed this essential point. That was why I tried to bring it to your attention.

    it was that modifying an array while iterating over it is dangerous
    As I tried to suggest in my original message, it isn't dangerous. Sorry this wasn't clear to you.

    I understand that you fear this construction because you don't understand it, and that you have a faulty mental model of the way foreach loops are processed, which leads you to an incorrect expectation of what they will do when the underlying array is modified. However, this fear is only your private emotion. It is real, but it does not extend outside of yourself. In particular, you cannot conclude from the fact of your fear that the practice is actually "dangerous".

      dangerous: Being able or likely to do harm.

      I don't disagree that my mental model might be flawed. However, given my internal concept of foreach it is likely that modifying the array while using for each is dangerous (likely to do harm).

      You could certainly make your points without splitting hairs on the meanings of words. The fact is perl has foreach to hide the use of an index to iterate over an array, makeing most array usage much easier in the process. I believe that this act of obscuring the underlying use of indexes would also mean that the actual implementation is not a reliable way to decide how it will respond when you modify the array. Since the documentation explicitly says not to do it and I don't know how its implemented internally, I'll stick with not modifying it and I don't have to attribute it to fear or a faulty mental model, it's just good since.

      Eric Hodges