String#stripの動作

Ruby 1.9.1と1.9.2での仕様変更

Ruby 1.9の仕様では、strip、lstrip、rstripは全角空白などユニコードの空白も除去する、と思ってましたが、1.9.2でアスキーの空白だけ除去するように変更されていました。

"\u{3000}hello\u{3000}".strip  #=> "hello"      Ruby 1.9.1 
"\u{3000}hello\u{3000}".strip  #=> " hello "  Ruby 1.9.2 

splitの空白による分割も、同様にユニコード空白→アスキー空白に変更されました。

末尾のヌル文字の扱い

rstripとstripはヌル文字も除去することに気付きました。文字列先頭のヌル文字のほうは、lstripとstripで除去されません。末尾のヌル文字の扱いは、Ruby 1.8と1.9で若干違いがあります。

"hello\x0".rstrip    #=> "hello"      Ruby 1.8、1.9どちらも
"hello\x0\n".rstrip  #=> "hello\000"  Ruby 1.8
"hello\x0\n".rstrip  #=> "hello"      Ruby 1.9

というわけで、記事を修正しました。