gsub(pattern, replace)はpatternにマッチする部分をすべてreplaceに置き換えてくれる便利メソッドです。patternとして正規表現、replaceとして文字列をそれぞれ指定することが多いと思いますが、実はブロックを持つこともでき__「patternでひっかけた部分をこねくりまわしてreplaceにしたい」__というときにはとても便利です。
たとえば英数字からなる文字列のうち、aとcだけをすべて大文字にする場合は次のように書くことができます。
p "1a2b3c".gsub(/[ac]/){|ch| ch.upcase} #=> "1A2b3C"
余談ですが、Rubyでは「暗黙のProc化」とでもいうべき裏機能(?)があります。これは&objのようにアンパサンドを先頭に付与した場合、それに続くobjをProcとして扱おうとするというもので、なかでも&:symbolのよう「アンパサンド + Symbol」という組合せはよく使われます。
たとえば文字列配列の中身をすべて整数に変換したい場合、この「暗黙のProc化」を利用して次のように書くことができます。
words = ["1", "2", "3"]
p words.map{|ch| ch.to_i} #=> [1, 2, 3]
p words.map(&:to_i) #=> [1, 2, 3]
この例ではmapメソッドのブロックを&:to_iで代用しています。ブロックありのgsubもこれと同じにようにブロックを省略し、「暗黙のProc」で代用することができます。つまり最初の例は次のようにもかけてしまうということになります。
p "1a2b3c".gsub(/[ac]/, &:upcase) #=> "1A2b3C"
ブロックをわざわざ書く必要がない分、とてもらくちんですね(`・ω・´)シャキーン