On Tue, Feb 18, 2003 at 07:27:53PM +0900, Steve Hill wrote: > Block_local=Struct.new("Block_local", :a, :b) > > a=1 > b=2 > > [1,2,3].each do |x| > local=Block_local.new(a,b) > local.a*=x > local.b+=x > p local > end You've only displaced the problem: 'local' now must be a block-local variable, instead of 'a' and 'b' If you declared 'local' in an outer scope, then under the current rules this 'local' will be bound to it, and things will break even worse than normal :-) Regards, Brian.