From: Ken Bloom Date: 2009-01-19T09:38:45+09:00 Subject: Re: Why eval is not failing in the third case ( c3) On Sun, 18 Jan 2009 16:35:31 -0500, Raj Singh wrote: >>> c1 = 'hello' >>> eval c1 > NameError: undefined local variable or method `hello' for main:Object > >>> c2 = 'hello #{hi}' > => "hello \#{hi}" >>> eval c2 > NameError: undefined local variable or method `hello' for main:Object > >>> c3 = '#{hi} hello' > => "\#{hi} hello" >>> eval c3 > => nil > > > My question is why the eval of c3 is returning nil. It should fail > saying that undefined local variable just as it did in the case of c2 ? In the second and third cases, everything after (and including) the # is interpreted as a comment. Thus, you're executing hello hello #{hi} #{hi} hello In case 1, hello is a undefined method, so a NameError is raised In case 2, hello comes before the comment, so it gets executed (with no arguments). A NameError is raised because it's an undefined method. In case 3, hello is part of the comment. Nothing gets executed, so no NameError is raised. -- Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory. Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/