こんにちは、阿部です。

 原因がどうにもわからない事態が発生して、自分一人の力ではどうにもなら
ないように感じたので、質問させていただきます。

 下のようなコード (もっと長い全体の一部です) で、

class Category
  def id= ( i )
    $_ = @object_id
    @object_id = ((i)? i.to_i: nil)
    if !$_ and !@object_id and i then
      raise "why?"
    end
  end
end

 @object_id が代入前と代入後で変化しないという現象が起きました。
(つまり例外が発生)

 不思議なのが、たくさんのデータに対して上のメソッドを適用すると、周辺
のコードを書き換えただけで例外の発生する位置が変わってしまうことです。
あるときは 50 個目で発生していたのが、p などを加えると 30 個目になって
しまったりします。

 この現象が発生したのは、
ruby 1.6.5 (2001-09-19) [i386-cygwin]
 でした。

 FreeBSD に同じデータを持っていくと、今度は上のような事態が起こらず、
スクリプトは思った通りに動作してくれました。なので、スクリプトのアルゴ
リズムが間違っているわけではないと思っているのですが…。
 BSD でのバージョンは、
ruby 1.6.4 (2001-06-19) [i386-freebsd4.3]
 です。

--------
阿部 茂
Homepage  :  http://homepage1.nifty.com/blackpoint/
  e-mail  :  shiger-a / nifty.com            (@nifty)