__FILE__と$0の違い

ググればいろんなところで解説されているけど、実際にコード書いて確かめてみた。

puts "__FILE__: #{__FILE__}"
puts "$0: #{$0}"
require_relative filename
% ruby filename.rb
__FILE__: filename.rb
$0: filename.rb
% ruby require_filename.rb
__FILE__: /Users/naoty/workspace/ruby/filename.rb
$0: require_filename.rb
  • __FILE__は実行中のプログラムのファイル名(リファレンスによると、フルパスとは限らないみたい)
  • $0は実行時に指定されたファイル名(相対パス)
  • 以下のようなコードを見かけるのだけど、相対パスと絶対パスで一致しない場合は考慮されていないような気がする。。。
if __FILE__ == $0
  # hogehoge
end