tdrk's diary

とある情報系大学生。主には自分のための備忘録...になる予定

【ruby】ARGVとgetsの併用

rubyでプログラム書いていたら

`gets': No such file or directory - 3 (Errno::ENOENT)

と怒られたので調べてみた。


原因はARGVとgetsの併用によるもの。

このエラーが起こるプログラム例は次の通り。

if ARGV.length == 0 then
  puts "usage : 'ruby test.rb [string]'"
  exit 1
end
filename = ARGV[0]
puts "file name is #{filename}. open this file?[y/n]"

input = gets

if input == "y" or input == "Y" then
  File.open(filename)
else
  puts "do nothing."
end

このプログラムを

ruby test.rb aiueo.rb

のように動かすと上のようなエラーが起こる。
(引数にtest.rbを指定するとエラーは起こらないがgetsが標準入力としては動かない)

この対処法としては、

...
input = gets
...

...
input = STDIN.gets
...

と書くことで標準入力を受け取るよう、思い通りに動くようになる。