kind=defined
names=eval
visibility=public

--- eval(expr) -> object
--- eval(expr, bind, fname = __FILE__, lineno = 1) -> object

文字列 expr を Ruby プログラムとして評価してその結果を返しま
す。第2引数に [[c:Proc]] オブジェクトまたは [[c:Binding]] オブジェ
クトを与えた場合、そのオブジェクトを生成したコンテキストで文字列を
評価します。

expr の中のローカル変数の扱いはブロックの場合と同じです。すなわち、eval 
実行前に補足されていた変数は eval 実行後にブロック外に持ち出せます。

fname と lineno が与えられた場合には、ファイル
fname の行番号 lineno から文字列 expr が書かれているかのように
コンパイルされます。スタックトレースの表示などを差し替えることが
できます。

bind によらずに特定のオブジェクトのコンテキストで expr を評価したい
場合、 [[m:Module#module_eval]], [[m:Object#instance_eval]] が使えます。

@param expr  評価する文字列です。
@param bind  [[c:Proc]] オブジェクトまたは [[c:Binding]] オブジェクトです。
@param fname スタックトレースに表示するファイル名です。
@param lineno 文字列 expr が書かれていると想定する先頭の行番号を整数で指定します。

  a = nil
  eval('a = RUBY_RELEASE_DATE')
  p a #=> "2007-03-13"
  
  eval('def fuga;p 777 end')
  fuga #=> 777
  
  eval('raise RuntimeError', binding, 'XXX.rb', 4)
  #=> XXX.rb:4: RuntimeError (RuntimeError)
  #       from ..:9

@see [[m:Kernel.#binding]],[[m:Module#module_eval]],[[m:Object#instance_eval]],[[m:Object#method]],[[m:Object#send]]


