def traverse(struct, root = "") case struct when Hash then struct.each { |key, value| traverse(value, "#{root}.#{key}") } else puts "#{root} --> #{struct}" end end traverse({a: 1, b: {c: 2, d: {e: 3, f: 4}}})