superclass=
type=object
library=_builtin
extended=Enumerable
included=

スクリプトに指定した引数
([[m:Kernel::ARGV]] を参照) をファイル名とみなして、
それらのファイルを連結した 1 つの仮想ファイルを表すオブジェクトです。
ARGV が空なら標準入力を対象とします。
ARGV を変更すればこのオブジェクトの動作に影響します。

    while line = ARGF.gets
      ....
    end

は、

    while argv = ARGV.shift
      File.open(argv) {|file|
        while line = file.gets
          ....
        end
      }
    end

のように動作します。

ARGF を処理するごとに ARGV の要素は一つずつ取り除かれます。
最後まで ARGF を読み込んだ後、再度 ARGF から内容を読むと
(ARGV が空なので)標準入力からの読み込みとなります。

    ARGV.replace %w(/tmp/foo /tmp/bar)
    ARGF.each {|line|
        # 処理中の ARGV の内容を表示
        p [ARGF.filename, ARGV]
        ARGF.skip
    }
        # => ["/tmp/foo", ["/tmp/bar"]]
        #    ["/tmp/bar", []]
    # 最後まで読んだ後 (ARGV が空) の動作
    p ARGF.gets      # => nil
    p ARGF.filename  # => "-"

[[m:Kernel.#gets]] など一部の組み込み関数は
ARGF.gets などこのオブジェクトをレシーバとしたメソッドの省略形です。
