>>>>> "c" == craig duncan <duncan / nycap.rr.com> writes: c> if not defined? i for this line, ruby think that `i' is a method (`i' was never defined as a local variable before this statement) At runtime because the method `i' is not defined it will enter in the if and execute : c> i = 0 this time `i' make reference to a local variable (because you make an assignment) and is initialized at 0 c> end c> p i += 1 c> j = 0 if not defined? j At compile time, ruby resolve `j' as a reference (in the 2 cases) to a local variable, because `j = 0' was seen *before* `defined? j' At runtime, because `j' is a local variable, it is also defined and ruby don't execute the code `j = 0' this mean that j contain nil c> p j += 1 it give an error `+' is not defined for nil (i.e. `j') Guy Decoux