Edited at

たまに便利な、Rubyの組み込み定数

More than 3 years have passed since last update.

ちょっとしたコマンドラインツールとかに使えそうな、Rubyの組み込み定数についていくつかメモ。


STDIN

標準入力を受け取るオブジェクトです。


stdin.rb

str = STDIN.gets

p str

こんな感じで入力した値を受け取る事ができます。

$ ruby stdin.rb

hoge #hogeと入力
#=> "hoge\n"


STDOUT, STDERR

それぞれ、STDOUTは標準出力、STDERRは標準エラー出力に対応するオブジェクトです。


std.rb

STDOUT.puts "STDOUT!"

STDERR.puts "STDERR!"

#  標準出力

$ ruby ./std.rb > hoge.log
#=> STDERR!
$ cat hoge.log
STDOUT!

# 標準エラー出力
$ ruby ./std.rb 2> fuga.log #=> STDOUT!
$ cat fuga.log
STDERR!


ENV

環境変数を表すオブジェクトです。

例えば、以下のような値が取得できます。

home = ENV['HOME']

p "user home = #{home}"
#=> "user home = /Users/USERNAME"

shell = ENV['SHELL']
p "user shell = #{shell}"
#=> "user shell = /bin/zsh"


ARGF

引数で作られる、仮想ファイルを表すオブジェクトです。

以下の様な動きをします。


test.text

a

b
c


argf.rb

p ARGF.filename

while line = ARGF.gets
p line
end

$ ruby ./argf.rb ./test.txt

#ファイル名を取得して出力
"./test.txt"
#1行ずつ読み込んだものを出力
"a\n"
"b\n"
"c\n"


ARGV

Rubyスクリプトに与えられた引数を表す配列です。

与えらた引数が配列で出力されます。


argv.rb

p ARGV


$ ruby ./argv.rb aaa bbb ccc

#=> ["aaa", "bbb", "ccc"]


DATA

__END__と組み合わされて使われるんだと思います。

__END__ は Ruby スクリプトの終わりを表すキーワードで、これ以降はスクリプトとして読み込まれません。

DATA__END__以降にアクセスできます。


data.rb

p DATA.gets

p DATA.gets
p DATA.gets

__END__
aaaa
bbb
ccc


$ ruby ./data.rb

"aaaa\n"
"bbb\n"
"ccc\n"


参考

http://www.geocities.jp/taka_owl2005/job/UNIX/tool/ruby/ENV.html

http://passingloop.tumblr.com/post/12376208854/ruby-end-data