Stefan Kaes wrote:
> Robert Klemme wrote:
>
>> This comes up again and again.  You might want to search the
>> archives.
>>
>>
> This comes up again and again because the current behaviour is
> inconsistent with the proudly stated principle of least suprise. As I
> have said before: eval "code" should be equivalent to code in all
> contexts.
>
>> Short story: Ruby determines local variables at parse time.
>> Although you can bind values to local vars with eval you cannot
>> access them outside of eval because they are not known there:
>>
>> 14:44:40 [source]: ruby -e 'eval("x=10");p(eval("x"))'
>> 10
>> 14:44:46 [source]: ruby -e 'eval("x=10");p x'
>> -e:1: undefined local variable or method `x' for main:Object
>> (NameError) 14:44:51 [source]: ruby -e 'x=nil;p x;eval("x=10");p x'
>> nil
>> 10
>>
>>
>>
> However,
>
> $ irb
> irb(main):001:0> eval "x=10"; p x
> NameError: undefined local variable or method `x' for main:Object
>         from (irb):1
> irb(main):002:0> eval "x=10"
> => 10
> irb(main):003:0> p x
> 10
> => nil
> irb(main):004:0> exit
>
> If this isn't bound to be confusing ...

You cannot trust IRB on local variables.  This too comes up from time to
time in these circumstances... :-)

Regards

    robert