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]