Ruby:ブロックの使い方

あるファイルを開きます。先頭の行に"# enconfig: cp932"を書き加えます。
書き加えたファイルを"ファイル名.new"、"ファイル名.old"とします。

そんなプログラムを書いたRubyコードがこれ。

 1 def add_magic_comment(file)
 2   File.open("#{file}.new", "w") do |newfile|
 3     newfile.puts("# encoding: cp932")
 4     File.open(file, "r") do |oldfile|
 5       oldfile.each_line do |line|
 6         newfile.puts(line.chomp)
 7       end
 8     end
 9   end
10   File.rename(file, "#{file}.old")
11   File.rename("#{file}.new", file)
12 end

line2 ファイルを書き込みモードで開いて、結果をnewfileに渡します。newfileはオブジェクトです。
line3 newfileにputsメソッドで"encoding: cp932"を書きこむ
line4 同ファイル名(putsで書きこまれる前のファイル)を読み込みモードでoldfileに開く
line5 一行ごとに読み込んでlineに設定する
line6 linle内の改行コードを削除してから、newfileに書きこむ。
line10〜 元あったファイルをoldfile、新しくできたファイルをnewfileに書きかえる。



ブロックの使い方は慣れないうちは大変だが、慣れてしまえば書きやすくて便利なんだろうなぁ。