On Dec 18, 2005, at 2:46 PM, Joel VanderWerf wrote:

> Ezra Zygmuntowicz wrote:
>>
>> On Dec 18, 2005, at 2:27 PM, Grehom wrote:
>>
>>> Thanks Gene and Ezra, I tried your suggestions but with no luck.  I
>>> modified the main program 'mainprog.rb' as follows:
>>>    puts $:
>>>    load("stuff.rb", wrap=false)
>>>    puts myhash["a"]
>>>
>>> This produced following output:
>>>   C:\rubysrcs>ruby mainprog.rb
>>>     c:/ruby/lib/ruby/site_ruby/1.8
>>>     c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt
>>>     c:/ruby/lib/ruby/site_ruby
>>>     c:/ruby/lib/ruby/1.8
>>>     c:/ruby/lib/ruby/1.8/i386-mswin32
>>>     .
>>>     mainprog.rb:5: undefined local variable or method `myhash' for
>>> main:Object (NameError)
>>>
>>> and it seems the pwd '.' is part of the Load Path already  
>>> (without me
>>> changing anything)
>>>
>>> So I'm still puzzled (there are a few examples of code like this in
>>> aforementioned tutorial book)!
>>>
>>>
>>
>> Yeah I was wrong in thinking that load would load local vars. So like
>> others have said you will have to wrap your var in a method or class.
>> Or you could eval the file by reading the file in and running eval  
>> on  it.
>>
>> #a.rb
>> a = [1,2,3,4,5,6]
>> __________________
>>
>> #b.rb
>> a_contents = File.open("a.rb"){|f| f.read}
>> eval a_contents
>> p a
>>
>> # => [1, 2, 3, 4, 5]
>>
>> -Ezra
>
> [~/tmp] cat >a.rb
> a = [1,2,3,4,5,6]
> [~/tmp] cat >b.rb
> a_contents = File.open("a.rb"){|f| f.read}
> eval a_contents
> p a
> [~/tmp] ruby b.rb
> b.rb:3: undefined local variable or method `a' for main:Object  
> (NameError)
> [~/tmp] ruby -v
> ruby 1.8.2 (2004-12-25) [i686-linux]
>
> This only works if you assign to 'a' somewhere in b.rb before the  
> eval.

Shows what I get for typing b.rb into irb instead of making it a real  
file.

-Ezra