>>>>> "M" == Mark Slagell <ms / iastate.edu> writes: M> Lovely stuff! Thanks. The block_given? line gives me a "stack level too deep" M> error (wassat mean?) but the rest fits the bill nicely. This is because you use 1.4.6 and Dave Thomas use 1.6.0 To work with 1.4.6, you need 2 modifications >> class Class >> def method_missing(meth, *params) >> if block_given? if iterator? >> self.new(*params).send(meth) { |*p| yield *p } self.new(*params).send(meth) { |p| yield p } >> else >> self.new(*params).send(meth) >> end >> end >> end 1.4.6 interpret 'yield *p' as 'yield() * p' 1.6.0 interpret 'yield *p' as 'yield(*p)' and give a warning with -w Guy Decoux