From: "walles (Johan Walles)" Date: 2013-11-01T18:09:58+09:00 Subject: [ruby-core:58119] [ruby-trunk - Bug #9067] IO.reopen broken in 1.9/2.0, worked in 1.8 Issue #9067 has been updated by walles (Johan Walles). Thanks for the quick turnaround! $stdin.reopen(IO.new(1, "r+")) does what I want. ---------------------------------------- Bug #9067: IO.reopen broken in 1.9/2.0, worked in 1.8 https://bugs.ruby-lang.org/issues/9067#change-42709 Author: walles (Johan Walles) Status: Rejected Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN Try piping some input into the attached code: echo foo | reopen-fail.rb Works as expected with ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-linux]: * "foo" is printed at the middle of the screen * you can press RETURN to exit Results with ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux] and ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]: ./reopen-fail.rb:8:in `reopen': can't change access mode from "r" to "w" (ArgumentError) from ./reopen-fail.rb:8:in `
' AFAICT this makes it impossible to write Curses programs in Ruby that can accept input through pipes with newer versions of Ruby. In my particular case this blocks my Ruby-implemented less replacement: https://github.com/walles/moar -- http://bugs.ruby-lang.org/