Issue #9139 has been updated by duerst (Martin Dürst). Status changed from Open to Rejected Nothing is wrong with index. Array.new(4, Hash.new) creates an array with four copies of one and the same new hash. Your code is the same as h = Hash.new [h, h, h, h].each_with_index{ |item, index| item["index"] = index; item["value"] = 10*index; p index;} Maybe what you want is this: > Array.new(4) {|_| Hash.new}.each_with_index{ |item, index| item["index"] = index; item["value"] = 10*index; p index;} 0 1 2 3 -> [{"index"=>0, "value"=>0}, {"index"=>1, "value"=>10}, {"index"=>2, "value"=>20}, {"index"=>3, "value"=>30}] ---------------------------------------- Bug #9139: each_with_index https://bugs.ruby-lang.org/issues/9139#change-43082 Author: dostapn (Dima Ostapenko) Status: Rejected Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN Whats wrong with index? > Array.new(4, Hash.new).each_with_index{ |item, index| item["index"] = index; item["value"] = 10*index; p index;} 0 1 2 3 => [{"index"=>3, "value"=>30}, {"index"=>3, "value"=>30}, {"index"=>3, "value"=>30}, {"index"=>3, "value"=>30}] -- http://bugs.ruby-lang.org/