高木のブログ

【Ruby】ARGV と gets は併用できない

· 111 words · 1 minutes to read
Tags: Ruby

普通にやると、ARGV と gets は併用できなかったのでメモ

問題 🔗

以下のように ARGV と gets を同時に使おうとしたらエラーを吐いた

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 をつけてあげる

puts ARGV[0]
puts STDIN.gets.chomp
$ ruby app.rb hoge
hoge
fuga
fuga

わかりにくいけど、2行目の fuga は標準入力

ARGV の中身を空にするやり方もできる

puts ARGV[0]
ARGV.clear
puts gets.chomp

原因 🔗

gets は 引数(ARGV)にあるファイルの中身を取得する機能もあるらしい

サンプルテキストです。

引数にファイル名(ファイルパス)をつけて実行すると

$ 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
サンプルテキストです。
[]

参考 🔗

Categories


Tags