【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
...
と書くことで標準入力を受け取るよう、思い通りに動くようになる。