2014/11/19

Ruby ARGVとgetsを併用する

まったく知らないことに出くわしたのでメモ。
Rubyで小物ツールを作っていたわけですが…

first_arg = ARGV[0]

とかやって引数を読み込むのはよくやってました。
また、

input = gets

などとして、入力待ちにしといて何か入力させるのも、処理内容を確認させるときなどにこれまでもときどき使ってました。

で、両方同時につかうと、エラーに。

 `gets': No such file or directory

きょとんとしてしまいました。

どうやらgetsはARGF.getsの略で、引数をファイル名とみなしたものを取りに行くのがデフォルトの動作だそうです。そして、引数がない場合にはじめて標準入力を対象とするんだとか。知らんかった…。

input = STDIN.gets

などとして、明示的に標準入力を指定してあげると、期待通りの動作をしてくれました。

にほんブログ村 IT技術ブログ IT技術メモへ