Issue #4965 has been updated by matz (Yukihiro Matsumoto).

Status changed from Assigned to Rejected

The reason behind has been explained in #1141. If someone want to change the rule, he need to understand the rational first, then should try persuade me.

Matz.

----------------------------------------
Feature #4965: The problem of "print line if line = DATA.gets"
https://bugs.ruby-lang.org/issues/4965#change-25450

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/