ARGF.getsとSTDIN.getのお話

#! ruby -Ku
class Tango
 #TestMode = "t"
 if  ARGV[0] == "t"
  #ここに標準入出力から問題数をcountに入れて使いたい。
  count = gets.to_i
  # count = 10 #10問分 
  puts count
 elsif ARGV[0] == nil then
   ExitStatus = 0
   #System Quit
   exit(ExitStatus)
 end
end

ささっと読んでみると、ruby hoge.rb t と打ち込み起動し、その後、キーボードからの入力を待って、入力された数値がcountに入って無事にcountの中身が出力されそうですが、

Tango.rb:6:in `gets': No such file or directory - t (Errno::ENOENT)
from Tango.rb:6

と出てしまいます。

なぜかというと、引数で渡しているtをファイルと勘違いし、tというファイルからgetsしようとしているところにあります。
なので、そんなファイルなんぞありませんぜー とエラーが出ているわけです。

つまりここで何が言いたいのかというと、素のputsはSTDIN.putsで、あんまり意識せずにgetsと書いちゃうと、実はARGF.getsでこんな感じにハマっちゃいますよー みたいな感じです。

なので、

#! ruby -Ku
class Tango
 #TestMode = "t"
 if  ARGV[0] == "t"
  #ここに標準入出力から問題数をcountに入れて使いたい。
  count = STDIN.gets.to_i
  # count = 10 #10問分 
  puts count
 elsif ARGV[0] == nil then
   ExitStatus = 0
   #System Quit
   exit(ExitStatus)
 end
end

と、STDIN.getsを使うと解決することができました。

ちょっと ビールを飲みつつ書いたので乱文失礼いたしました。