ちょっとしたコマンドラインツールとかに使えそうな、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