Rubyのstring[0]の解釈についてメモ
僕は運用なのですが、先日またしてもコードを書くお仕事が来まして、今回は1からスクリプトを書くことになったのでRubyを使うことにしました。
初業務Rubyコーディングです。
今回はそのスクリプトを作成するにあたってはまったところをメモします。
環境はCentOS 5.3、Ruby 1.8.5(yum)、1.8.7、1.9.1です。
string[0]の解釈
if RUBY_VERSION >= "1.9.0" str = "7" p str[0] # => "f" elsif RUBY_VERSION >= "1.8.0" str = "7" p str[0] # => 55 end
Ruby 1.8だとstring[0]はASCIIですが、Ruby 1.9のstring[0]は文字列ということが分かりました。
普段は全く困らないのですが、今回はこの1.8の挙動を利用したものを利用していたため困りました。
正しいかどうか分からないですが、以下の方法で解決しました。
if RUBY_VERSION >= "1.9.0" str = "7" p str[0].unpack("c")[0] # => 55 elsif RUBY_VERSION >= "1.8.0" str = "7" p str[0] # => 55 end
おわり。
実はもうひとつはまったところがあり、IO#eof?の解釈が1.8.5と1.8.7で違うことがあったことを書いていたのですが、
記事を書いている時に試したら再現せず…。家には実スクリプトが無いので、またの機会に。