rubyでtail -fみたいな処理

必要に迫られ、書いてみた。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
#

def tail(filepath)
  fpointer = 0
  f = open(filepath)
  f.seek(-32, IO::SEEK_END) # 末尾から32byteから開始(要調整)
  begin
    while true
      puts f.readline
      fpointer = f.pos
    end
  rescue EOFError
    f.close unless f.closed?
    # 更新を検知するまで待つ
    closetime = File.mtime(filepath)
    while (File.mtime(filepath) == closetime)
      sleep 0.5
    end
    f = open(filepath)
    f.seek(fpointer, IO::SEEK_SET)
    retry
  end
end

file = ARGV.shift
#puts file
tail(file)

もっと短く書けると思う。
と思って探したら
Subject: [ruby-list:26301] Re: tail -f のように読み続ける方法は?
というのを見つけた。