I think I've found a gotcha. Really, it should be expected behavior, but it wasn't immediately obvious to me, so I thought it's at least worth mentioning. Let's say you want to iterate through an array and delete any items in that array that match a certain criteria. I thought it'd make sense to do this: items.each do |x| if x == "" items.delete(x) end end If items.each referred to items[] by reference, this would make sense. But since it references by value, you're literally changing the array live, as you're iterating through it. This means that, if you delete an item in mid-iteration, you change the index of items[]. Since you deleted something, you skip the next item. 1) Do I have this right? 2) Am I right in assuming that it's possible to create an infinite loop this way by continually push()ing things on to items[]? -- Posted via http://www.ruby-forum.com/.