>>288
I/Oの反復処理を書く方法はいくつかあって(.... ここで「ほにゃ」を「英大文字変換」と仮定):
(1) 反復構文 until .... end を使う -- Rubyを使い始めたばかりの人向け
  until (c = STDIN.getc).nil?
    STDOUT.putc c.upcase
  end
(2) イテレータ IO#each_char を使う(>>290) -- フツウにRubyらしいやりかた
  STDIN.each_char do |c|
    STDOUT.putc c.upcase
  end
(3) (2) + 遅延評価 Enumuable#lazy を使う -- イマドキ(?)のRubyらしいやりかた(Ruby 2.0から)
  STDIN.each_char.lazy.map { |c|
    c.upcase
  }.each do |c|
    STDOUT.putc c
  end

 ・Rubyist Magazine - 無限リストを map 可能にする Enumerable#lazy
     http://magazine.rubyist.net/?0041-200Special-lazy
 ・Enumerable lazy について
     http://www.slideshare.net/cuzic/enumerable-lazy