前原と申します。

Hpricotを利用した際,疑問点が出てきましたので,相談させてください。

以下を実行した際,「Ruby home page」と出力されることを期待していたので
すが,画面には,「ruby home page」と表示されます。
-------------------------------------
require 'rubygems'
require 'hpricot'

doc = Hpricot('ruby home page')
(doc/:a).each do |ele|
  ele.inner_html.gsub!(/ruby/, "Ruby")
  p ele.inner_html
end
-------------------------------------

何故だろうと思い、hpricot-0.6/lib/hpricot/elements.rbを見てみたところ,
inner_htmlメソッドがあり,そこでは,
        map { |x| x.inner_html }.join
というような配列に対する処理をやっているので,gsub!できないんだなと理
解したつもりなのですが,このinner_htmlは,Elements#inner_htmlです。

以下のように,(doc/:a)は,Hpricot::Elementsなので,(doc/:a)に対して
inner_htmlメソッドを呼び出して実行できるのは納得できるのですが,
p (doc/:a).class        #=> Hpricot::Elements
p (doc/:a).inner_html   #=> "ruby home page"

以下のように,eleは,Hpricot::Elemなので,ele.inner_htmlが実行できるの
が不思議な感じがします。
  p ele.class           #=> Hpricot::Elem
  p ele.inner_html
 
アドバイスをいただければ幸いです。
--
宮崎県立佐土原高等学校(情報技術科)
前原 正英 <maehrm / miyazaki-c.ed.jp>
http://www.miyazaki-c.ed.jp/sadowara-th/