Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^4: self-feeding infinite loop

by Dominus (Parson)
on Aug 20, 2007 at 16:50 UTC ( #633868=note: print w/ replies, xml ) Need Help??


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

your current index either no longer exists or is in a completly new location?
The index is a number. Numbers do not have locations, and cannot be created or destroyed, not even by the splice operator.


Comment on Re^4: self-feeding infinite loop
Re^5: self-feeding infinite loop
by eric256 (Parson) on Aug 20, 2007 at 18:55 UTC

    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
      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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://633868]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (7)
As of 2014-12-20 13:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (95 votes), past polls