脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Rubyの特殊変数($@とか$`とか$数字とか・・・)

特殊変数

Rubyの組み込み変数の一部は、通常の変数としては使用できない特殊な名前を持っています。
例えば、 $' や $& あるいは $1, $2, $12345678901234567890 がそうです。
このように 「'$' + 特殊文字一文字」、または「'$' + 10進数字」という名前を持つ変数を特殊変数と呼びます。
また、 $-F や $-I のような変数もあります。 これらは Ruby の起動オプションと -F や -I などと対応しており、オプション変数と呼ばれます。

とのことです。

ちょこちょこ忘れて調べるので、自分用メモも兼ねて例と一緒にまとめておきたいと思います。

特殊変数一覧

正規表現関係

$', $&, &`
  • $' : マッチした文字列より前の文字列
  • $& : マッチした文字列
  • &` : マッチした文字列より後ろの文字列
str = 'abcdefghijk'

/efg/.match(str)

puts $`   # => abcd
puts $&   # => efg
puts $'   # => hijk
$~
  • マッチしたMatchDataオブジェクトを表示する
str = 'abcdefghijk'

/efg/.match(str)

puts $~.class  # => MatchData
puts $~        # => efg
puts $&.class  # => String
puts $&        # => efg
$+, $数字
  • $数字 : 正規表現中の 1 番目の括弧にマッチした文字列
  • $+ : 正規表現中の 最後の括弧にマッチした文字列
str = 'abcdefghijklmnopqrstuvwxyz'

/a(b)c(d)e(f)g(h)i(j)k(l)m(n)o(p)q(r)s(t)u(v)w(x)yz/.match(str)

puts $1   # b
puts $2   # d
puts $11  # v
puts $12  # x
puts $13  # nil
puts $+   # x

ファイル・ライブラリ関係

$"
  • requireしたライブラリの一覧を帰す
require_relative "lib_sample1"
require_relative "lib_sample2"

puts $"
  # => [
  #       "enumerator.so", 
  #       .
  #       .
  #       "/home/roma/lib_sample2.rb"
  #     ]
$:

requireが検索するディレクトリ一覧を返す

puts $:
  # => [
  #       "/usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0", 
  #       .
  #       .
  #       "/usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/x86_64-linux"
  #     ]
$-I
  • ロードパスの一覧を返す
p $-I
  # => [
  #      "/usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0", 
  #      .
  #      .
  #      "/usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/x86_64-linux"]
  #    ]
$*
### ruby test.rb foo barで実行した場合\
p $* # => ['foo', 'bar']
$0
  • ファイル名を表示する
### ruby test.rbの時
puts $0 # => test.rb

例外関係

$@
  • 例外のバックトレース
begin
  raise
rescue
  puts $@ # => test.rb:2:in `<main>'
end