バリケンのRuby日記 RSSフィード

2007-12-27

[] Ruby 1.9.0 のirbコマンドには-Kオプションがない?  Ruby 1.9.0 のirbコマンドには-Kオプションがない? - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  Ruby 1.9.0 のirbコマンドには-Kオプションがない? - バリケンのRuby日記  Ruby 1.9.0 のirbコマンドには-Kオプションがない? - バリケンのRuby日記 のブックマークコメント

さっそくWindowsでもRuby 1.9.0をためしてみようと思って、こちらのサイト経由でruby-1.9.0-0-i386-mswin32.zipをダウンロードして展開してみたよ。

ぼくはC:\ruby-1.9.0に展開してみたよ。そしてコマンドプロンプトで

set path=c:\ruby-1.9.0\bin;%PATH%

と入力すれば、Ruby 1.9.0が使えるようになっているはずだよ。

C:\>set path=c:\ruby-1.9.0\bin;%PATH%
C:\>ruby -v
ruby 1.9.0 (2007-12-25 revision 14709) [i386-mswin32]

大丈夫みたい。じゃあ、irbを起動してみよう!

C:\>irb -Ks
c:/ruby-1.9.0/lib/ruby/1.9.0/irb/init.rb:186:in `parse_opts': private method `fail' called for IRB:Module (NoMethodError)
        from c:/ruby-1.9.0/lib/ruby/1.9.0/irb/init.rb:19:in `setup'
        from c:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:54:in `start'
        from c:/ruby-1.9.0/bin/irb.bat:21:in `<main>'

C:\>

あれれ、Ruby 1.9.0のirbでは-Kオプションがなくなっちゃったのかな?-Kオプションをつけないと、pメソッドの結果とかが文字化けしちゃうよね。

C:\>irb
irb(main):001:0> p 'こんにちは'
"\x82\xB1\x82\xF1\x82\xC9\x82\xBF\x82\xCD"
=> "\x82\xB1\x82\xF1\x82\xC9\x82\xBF\x82\xCD"
irb(main):002:0>

うーん、やっぱり。じゃあ、$KCODEを指定すればいいかな?

irb(main):002:0> $KCODE = 's'
(irb):2: warning: variable $KCODE is no longer effective; ignored
=> "s"
irb(main):003:0>

ありゃ、Ruby 1.9.0では$KCODEを指定しても意味がない、と警告が出ちゃった。

うーん。いままでのRuby 1.8系の-Kオプションのように、irbの起動時の文字コードを指定するにはどうしたらいいんだろう?

[] Ruby 1.9.0 のirbで文字コード指定  Ruby 1.9.0 のirbで文字コード指定 - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  Ruby 1.9.0 のirbで文字コード指定 - バリケンのRuby日記  Ruby 1.9.0 のirbで文字コード指定 - バリケンのRuby日記 のブックマークコメント

とりあえず、バッドノウハウ的な方法で解決しちゃった。c:/ruby-1.9.0/bin/irb.batをテキストエディタで開いて、

"%~d0~p0ruby" -x "%~f0" %*

となっていたところを、

"%~d0~p0ruby" -Ks -x "%~f0" %*

に修正しちゃったよ。

こんどはうまくいくかな?

C:\>irb
irb(main):001:0> p 'こんにちは'
"こんにちは"
=> "こんにちは"
irb(main):002:0>

うん、大丈夫みたい。でも本当はちゃんとした設定の仕方があるのかも。

設定ファイル(.irbrc)で設定するのかな?たしか.irbrcで設定ファイルで設定する項目は、irb上でconfコマンドを入力すればわかるんだったよね。

irb(main):002:0> conf
NoMethodError: undefined method `sub' for :@ap_name:Symbol
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb/context.rb:237:in `block in inspect'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb/context.rb:236:in `each'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb/context.rb:236:in `inspect'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:298:in `output_value'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:151:in `block (2 levels) in eval_input'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:259:in `signal_status'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:147:in `block in eval_input'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb/ruby-lex.rb:244:in `block (2 levels) in each_top_level_statement'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb/ruby-lex.rb:231:in `loop'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb/ruby-lex.rb:231:in `block in each_top_level_statement'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb/ruby-lex.rb:230:in `catch'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb/ruby-lex.rb:230:in `each_top_level_statement'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:146:in `eval_input'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:70:in `block in start'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:69:in `catch'
        from C:/ruby-1.9.0/lib/ruby/1.9.0/irb.rb:69:in `start'
        from C:/ruby-1.9.0/bin/irb.bat:21:in `<main>'Maybe IRB bug!!
irb(main):003:0>

ありゃりゃ。やっぱりまだRuby 1.9.0は安定してないのかな?

追記:補足を書いたから、参考にしてね。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20071227