Rubyで、ファイルからの入力と標準入力について、ちょっとした疑問点が出てきました。
以下のような、サンプル(hoge.rb)において、
# ファイルからの読み込み open(ARGV[0]) do |f| puts f.read end # 標準入力 print "Input> " str = gets puts str
実行すると、
mmasa@debian:~/work/ruby$ ruby -Ke hoge.rb foo.txt from foo.txt Input> from foo.txt
のように表示されます。
foo.txtの中身は、「from foo.txt」と書かれているだけです。
foo.txtの中身が表示されたあと、「Input> 」と表示され、キーボードからの入力待ちになると思ったのですが…。
#str = gets str = STDIN.gets
とすると、自分の意図した動作になります。
mmasa@debian:~/work/ruby$ ruby -Ke hoge.rb foo.txt from foo.txt Input> from keyboard from keyboard
なんでなんだろう?
追記
RubyリファレンスマニュアルのARGFを見ていたら、
gets など一部の組み込み関数は ARGF.gets などこのオブジェクトをレシーバとしたメソッドの省略形です。
とありました。納得しました。