71
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-11-25

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

71
66
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?