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;