Permission denied


組み込み関数 open についてマニュアルには以下の様に書いてあります。

open がブロックとともに呼び出された時、
open はファイルをオープンしてブロックを実行し、
ブロックの実行が終了するとファイルをクローズします。
この場合はブロックを評価した結果を返します。

でもきちんとクローズされてないっぽいです。

require 'fileutils'

if !File.exist?("test.txt")
  open("test.txt" , "w") {|file|
    file.puts "test"
  }
end

open("test.txt").each {|line|
  puts line
}

FileUtils.rm("test.txt")

これを実行すると Permission denied が発生します。
エラーが出ない様に、明示的に close を入れます。

require 'fileutils'

if !File.exist?("test.txt")
  open("test.txt" , "w") {|file|
    file.puts "test"
  }
end

f = open("test.txt")
f.each{|line|
  puts line
}
f.close

FileUtils.rm("test.txt")


エラーが発生するのは

ruby 1.8.5 (2006-08-25) [i386-mswin32]


発生しないのは

ruby 1.8.4 (2005-12-24) [i486-linux]


既出?