I don't think irb is ignoring the "private" flag -- you're actually inside the private scope of an Object instance whenever you're inputting data at the prompt. That means methods are defined on the current class; i.e., Object. It's easy to test: (at irb prompt:) def test puts self.id end test => -542341874 (or similar) puts self.id => -542341874 (or similar) To show that all 'private' flags are not being ignored, try the following (again, in irb): class Foo private def test puts "testing" end end f = Foo.new f.test => NoMethodError: private method `foo' called for #<A:0xbf50fcf4> from (irb):16 Hope that helps, Lennon