【Ruby】ARGV と gets は併用できない
2022/04/06
普通にやると、ARGV と gets は併用できなかったのでメモ
問題
以下のように ARGV と gets を同時に使おうとしたらエラーを吐いた
app.rb
puts ARGV[0]
puts gets.chomp$ ruby app.rb hoge
hoge
Traceback (most recent call last):
2: from app.rb:2:in `<main>'
1: from app.rb:2:in `gets'
app.rb:2:in `gets': No such file or directory @ rb_sysopen - hoge (Errno::ENOENT)解決方法
STDIN をつけてあげる
app.rb
puts ARGV[0]
puts STDIN.gets.chomp$ ruby app.rb hoge
hoge
fuga
fugaわかりにくいけど、2行目の fuga は標準入力
ARGV の中身を空にするやり方もできる
app.rb
puts ARGV[0]
ARGV.clear
puts gets.chomp原因
gets は 引数(ARGV)にあるファイルの中身を取得する機能もあるらしい
sample.txt
サンプルテキストです。引数にファイル名(ファイルパス)をつけて実行すると
$ ruby app.rb sample.txt
sample.txt
サンプルテキストです。1行目に引数のファイル名、2行目にファイルの中身が出力される
補足情報
gets を使うタイミングと、 ARGV の中身が先頭から取り除かれる
p ARGV
puts ARGV[0]
puts gets.chomp
p ARGV$ ruby app.rb sample.txt
["sample.txt"]
sample.txt
サンプルテキストです。
[]