Rubyの不思議

(追記:事故解決しますた)

#!/usr/bin/env ruby
file="hoge.txt"
if File.exists? file then
  p "#{file} does not exist."
else
  p "#{file} already exists."
end

というコードを実行したとき

$ touch hoge.txt
$ ./test.rb
hoge.txt does not exist.
$

となった。激しく直感に反するコードだなRuby。というか、調べた結果とも真逆なんだが何か問題が? まさか環境依存?

あれ、でも

p File.exists? "hoge.txt"

の結果はtrueだった。if文がおかしーとかそういうことが?! 謎だ。謎だ。もっと謎なのは

p file if File.exists? file

とかやるとちゃんと"hoge.txt"と表示されることだ。notを挟めばもちろん何も表示されない。手元にRuby本がないだけに疑問はちっとも解けない。

(追記)正しいコードはもちろん

-if File.exists? file then
+if not File.exists? file then

ですね。全然直感に反してない。