From: Kevin Bullock Date: 2004-05-21T04:23:44+09:00 Subject: Re: variable scope in required files On May 20, 2004, at 9:08 AM, Dave Baldwin wrote: > This behaviour has rather surprised me: > > file a.rb > a = 10 > > file b.rb > require "a.rb" > puts a > > dave 123% ruby b.rb > b.rb:2: undefined local variable or method `a' for main:Object > (NameError) > > dave 124% ruby -v > ruby 1.8.1 (2003-10-31) [powerpc-darwin] > > Using $a fixes this but I don't want to do this or I could join the > two files at run time and eval them. > > I didn't expect the scope of a to be private to a.rb and can find no > mention in pickaxe about this. In C, unless you declare them extern[1], variables are private to the file they're declared in. Using the $a notation is equivalent to declaring the variable extern. It indicates you're using a global variable instead of a local one. Perhaps the better question, though, is why do you need a global variable? Every time I feel the urge to use a global variable, I ask myself that question. [1] E.g.: extern a = 1;