Kernel#warnは標準エラー出力(STDERR)に出力してくれるメソッドです。
Kernelのメソッドなので、putsと同じ感覚で使えます。
$ cat test.rb warn "error test" puts "stdio test"
とした場合、
$ ruby test.rb > echo error test $ ruby truby test.rb 2> echo stdio test
と、putsはSTDIO、warnはSTDERRに対応している事がわかります。
実装面の話
上でputsと同じ感覚と書きましたが、公式によると
この二式は等価との事です。
同じ仕様感なのも当たり前ですね
warn(*message) $stderr.puts(*message) if !$VERBOSE.nil? && !message.empty?