おがたです。
自分が詰まったところを集めてみました。

しかし、今回まとめようと思って改めて FAQ や ML トピックスを
見直したのですが、同じ話が多いですね。

惜しむらくは、ドキュメントの内容が多岐にわたっていて探しづ
らいのと、トピックスと FAQ に分散されている事でしょうか。
常時接続のような体制でないと探すのは大変だと感じました。
一件一ファイルの形で圧縮して落とせるようにしてあると(あるい
は CVS がなお良いのかもしれませんが) Namazu 等にかけられる
ので、ホームユーザにもありがたいと思います。

* 配列内の値の変換
a = [1,2,3]
a.each{|item| item = item + 10} # 誤り
a.collect!{|item| item + 10}

代入した時点で元の item (配列に格納されているもの)とは別の
オブジェクトをさすためです。従って、

a = ['a','b','c']
a.each{|item| item.replace('x')}

など、破壊的メソッドは有効となります。

* メソッド呼び出しで 配列を展開した変数列を渡す

def sum(a,b.c)
  print a+b+c,"\n"
end

a = [1,2,3]
sum(*a) # -> sum(1,2,3) -> 6

* 任意のループを抜ける

catch(:last) {
  while true
    (1..5).each{|x|
      throw :last if x == 3
      print "#{x}\n"
    }
  end
}

* 時間待ちの処理

require 'timeout'

begin
  timeout(5) do
    $stdin.gets
  end
rescue TimeoutError
  print "timeout\n"
end

以下の例ではうまく機能しませんでした。
( ruby 1.6.0 cygwin1.1.2)
require 'timeout'

i = 0
begin
  timeout(5) do
    while true
      p (i+=1)
    end
  end
rescue TimeoutError
  print "timeout\n"
end

* 16 進数文字列を 10 進数文字列に変換する

i = "f".hex
print i, "->" ,format("%x",i)

* 組み込みクラスへの破壊的メソッドの追加

class String
  def sample!
    self.replace('sample')
#    self = 'sample' # これは誤り
  end
end

* 配列への nil の挿入

a = [1,2,3]
a[1,1] = nil  # a[1.1] = nil.to_a を行っている
p a # [1,3]

a = [1,2,3]
a[1,1] = [nil]
p a # [1,nil,3]

これは、nil.to_a が [] (空の配列)を返すために起こります。
ちなみに nil.to_s は "" (空の文字列)を返します。

---------------------------------------------------
Kenya Ogata 
E-mail   k_ogata / mbd.nifty.com
HomePage http://homepage1.nifty.com/~k_ogata/ruby/diary.html