From: "rosenfeld (Rodrigo Rosenfeld Rosas)" Date: 2012-03-30T22:11:07+09:00 Subject: [ruby-core:43937] [ruby-trunk - Feature #4965] The problem of "print line if line = DATA.gets" Issue #4965 has been updated by rosenfeld (Rodrigo Rosenfeld Rosas). Hi Matz, some people tried to with the argument that if you're reading a post-if/unless and they seem natural, using a variable assignment alongside with the post-if/unless would be just as natural. ---------------------------------------- Feature #4965: The problem of "print line if line = DATA.gets" https://bugs.ruby-lang.org/issues/4965#change-25462 Author: yimutang (Joey Zhou) Status: Rejected Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: Target version: Right now, I find the following code will raise an exception: print line if line = DATA.gets __END__ abcdef # undefined local variable or method `line' for main:Object (NameError) "print line while line = DATA.gets" also doesn't work, maybe "unless" "until" modifiers either. It seems that the Ruby interpreter is too impatient, once seeing unassigned variable "line", it croaks. However, the expression after "if" or "while" modifier should be evaluated first. Logically, I think the code above should work properly, there's no need to write "line = nil" before it. -- http://bugs.ruby-lang.org/