> Hi, > > busy with my script, I am trying to print my hash, which is built up as > follows: > > hash: > > key = A, value = [1,2,3] > key = B, value = [4,5,6] > > etc. > > I try this: > > @h.each do |key,value| > print key, " is ", value.each {|x| print x, " -- " }, "\n" > > The print is strange, becuase it looks like this now: > > 1 -- 2 -- 3 -- A is 123 > 4 -- 5 -- 6 -- B is 456 > > I don't understand why. If I interpreted this correctly, I've got the > following two questions: > > 1. How come the code block is executed first > 2. After that the key and value is printed, however, I don't see the > print for the values here (except for the print in de the code block, > which was executed already). :) I think what you want to actually do is: @h.each do |key,value| print key, " is ", value.join(' -- '), "\n" end or @h.each do |key,value| puts key, " is ", value.join(' -- ') end To hopefully answer your questions: You have asked Ruby to print out the return value of value.each{...}, which is simply value: [1,2,3] == [1,2,3].each {|n| do_something_with_n_if_you_like(n)} So that explains the 123 at the end of the line, because [1,2,3].to_s is "123" Why the "1 -- 2 -- 3" before everything else though? Well, _before_ Ruby can execute that first "print", it must _first_ evaluate what is being printed, just as if you had writen "print 1+2+3". In calculating that, Ruby calls values.each {...}, and this prints out the "1 -- 2 -- 3" at the start of the line. Hope that helps.