ファイル内で定義されている変数の一覧を取得する

ファイル内で定義されている変数の一覧が欲しい時がある。例えばこんな感じで変数が定義されていたとする。

hoge = 3
fuga = "bero"

この変数の一覧を取得したい場合、local_variablesを使うと上手くいく。

local_variables do |v|
  puts v
end
#=> hoge
#=> fuga

local_variablesはSymbolの配列なので、変数を評価した値が欲しい時はevalする。

local_variables do |v|
  puts eval(v.to_s)
end
#=> 3
#=> bero

前々から変数の一覧が欲しい時にどうやればいいか考えていたんだけど、なかなかいい方法が思い付かなかった。irbの補完では変数も補完の候補で出てくるからどうやっているのかirb/completion.rbを覗いてみたらlocal_variablesを使っていた。
この例では(名前からも分かるように)ローカル変数の一覧を取得している。グローバル変数の一覧を取得したい場合は、global_variablesで取得できる。