先日のこのエントリの続き。 http://d.hatena.ne.jp/tagomoris/20100924/1285322426 Ruby内部のコードを追っかけるのは時間かかるのでとりあえず置いておいて、1.9.2になってLOAD_PATHの仕様変更(カレントディレクトリが除外された)にともなって動作が変わった require と、追加された require_relative の実際の動作について追ってみた。手がかりは前のエントリにもらったコメント。 まず大前提 eval の第3引数にファイルパスを渡すことで、評価される文字列の中に __FILE__ (など)がある場合は第3引数(および第4引数の行数)を展開してくれる。 これがわかっておりませんでした。rackupすると最終的にconfig.ruをevalしてるのは以下のコード。 /* rack-1.2.1/lib/rack/build