全局变量可以在任何作用域中访问:

def a_scope
    $var = "some value"
end

def another_scope
    $var
end

a_scope
another_scope   # => "some value"

全局变量的问题在于系统的任何部分都可以修改它们,因此,我们几乎无法追踪谁把它们改成了什么。
所以,如非必要,尽可能少使用全局变量。
有时我们可以用顶级实例变量来代替全局变量。它们是顶级对象main的实例变量:

@var = "The top-level @var"

def my_method
    @var
end
my_method   # => "The top-level @var"

只要main在扮演self的角色,就可以访问一个顶级实例变量,但当其他对象成为self时,顶级实例变量就退出作用域了:

class MyClass
    def my_method
        @var = "This is not the top-level @var!"
    end
end

由于不像全局变量那么没有安全性,一般认为顶级实例变量比全局变量更安全。