From: Matthew Moss Date: 2008-05-09T09:26:43+09:00 Subject: Re: Principle of le,err i mean biggest surprise!!?? On May 8, 7:15 pm, globalrev wrote: > puts "Input sentence:" > sentence = gets.split() > puts > > temp = sentence > phrase = sentence > puts ":", temp, sentence, phrase > > phrase[0] = temp[1] > puts "oink", phrase, temp > > when changing phrase[0] this will change temp as well and even > sentence! makes no sense and very surprising. how do i do what i want > to do? > > so basically ami messing with pointers here or what? Essentially, yes, though I believe they are more commonly called references (and not in that C++ sort of way). When you do the assignment, phrase[0] = temp[1], you are simply making the 0th item of the phrase array refer to the same object that the 1st item of temp refers. You need to throw in a `dup` call (duplicate) where appropriate. If you want temp and phrase to be distinct from sentence, then change those assignments to: temp = sentence.dup phrase = sentence.dup If you wanted only phrase[0] to be distinct from temp[1], then: phrase[0] = temp[1].dup