When I type `self`, I get a return value `main`. I made this test:

```
main2 = Object.new

```

Then I can call `main2`, and it returns something, but when I call `main`, it raises an undefined variable error. How does this happen?

Here's the assumption I found in other site about how this top level environment works:

```
class Object  
  Object.new.instance_eval do  
    def self.to_s  
      "main"  
    end  
   private  
    ##  
    # Your program gets inserted here...  
    ##  

  end  
end 

```

It makes sense to me.