Deepak Gole wrote: > def foo > 1 > end > > foo ===>o/p 1 > foo.foo ===>o/p 1 > foo.foo.foo ===>o/p 1 > foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo............foo > ===>o/p 1 > > I got above o/p I see the same with ruby 1.8.6. It looks like you have defined foo as a method in Object, and hence is available to all objects: >> def foo; 1; end => nil >> "hello".foo => 1 >> Object.instance_methods.grep(/foo/) => ["foo"] Ruby 1.9 makes this slightly better by making the method private: $ irb19 --simple-prompt >> "hello".foo NoMethodError: undefined method `foo' for "hello":String from (irb):1 from /usr/local/bin/irb19:12:in `<main>' >> def foo; 1; end => nil >> "hello".foo NoMethodError: private method `foo' called for "hello":String from (irb):3 from /usr/local/bin/irb19:12:in `<main>' >> Object.private_instance_methods.grep(/foo/) => [:foo] I'm not sure why irb doesn't define methods as singleton methods of the 'main' (top level) object. You can do this yourself with a bit of fiddling: >> class << self; self; end.class_eval { def bar; 2; end } => nil >> bar => 2 >> 1.bar NoMethodError: undefined method `bar' for 1:Fixnum from (irb):4 from /usr/local/bin/irb19:12:in `<main>' -- Posted via http://www.ruby-forum.com/.