From: Takanori Adachi Date: 2003-12-23T04:08:43+09:00 Subject: [ruby-list:38926] Iterated sub! 足立@モルガンスタンレーです。 業務で ruby に大変お世話になっています。 現在 ruby 1.8.0 を使っていますが、以下のような現象に遭遇しました: =begin Among the combinations (A|B|C)+(1|2) below, only (C)+(1) leads the following error message: private method `sub!' called for nil:NilClass (NoMethodError) =end #va = "10.00" ## (A) #va = "10.10" ## (B) va = "10.1" ## (C) ## (1) va.sub!(/[0]+$/,"").sub!(/\.$/,"") ## (2) #va.sub!(/[0]+$/,"") #va.sub!(/\.$/,"") print va, "\n" これは、文字列としての数字の小数点以下にある末尾の不要な 0 (と小数点) を取り除くというものですが、va = "10.1" のとき、(1) の gsub! を行う と、上記のようなエラーが発生します。 これを、(2) のように、ふたつの gsub! に分て実行すると問題なく動きます。 一方 va が、最初の置換 /[0]+$/,"" で変化する場合には、(つまり、"10.00" や "10.10" の場合には)、(1) であってもうまく動きます。 これは仕様でしょうか? -- taka