Fri May 16 12:40:40 2003 Yukihiro Matsumoto <matz / ruby-lang.org> * eval.c (block_pass): chain previous block to the pushing block. という変更が入って以来、 % ./ruby -rresolv -e 'p Resolv.getaddress("www.ruby-lang.org")' "\322\373y\326" というようになります。これは本来 % ruby -rresolv -e 'p Resolv.getaddress("www.ruby-lang.org")' "210.251.121.214" となるべきで、間違ってます。 調べてみると、とあるところで Resolv::DNS::Resource::IN::A を yield し ているにもかかわらず受け取られるのは Resolv::IPv4 という変なことが起き ているようです。(それにも関わらずエラーにならないのは両方 address とい うメソッドを持っているからです。行儀が悪い...) 対症療法としては次のパッチを当てると直るんですが、上記のようなことがお こるのはそもそも変です。また、メソッドに与えられたブロックを &proc で 受けて &proc で渡すのと {|v| yield v } で引き渡すのでそんな違いが出て 来るのも変だと思います。 --- lib/resolv.rb 2003-04-22 06:14:08.000000000 +0900 +++ ../lib/ruby/1.8/resolv.rb 2003-05-18 12:38:18.000000000 +0900 @@ -465,7 +465,7 @@ timeout(tout, ResolvTimeout) { reply, reply_name = q.pop } case reply.rcode when RCode::NoError - extract_resources(reply, reply_name, typeclass, &proc) + extract_resources(reply, reply_name, typeclass) {|v| yield v} return when RCode::NXDomain raise Config::NXDomain.new(reply_name.to_s) -- [田中 哲][たなか あきら][Tanaka Akira]