わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

「when 式:」はエラー

Ruby 1.9.1を使って,http://journal.mycom.co.jp/articles/2006/12/22/wirble/でもhttp://pablotron.org/software/wirble/でもいいのですが,Wirbleをインストールしてから,~/.irbrcに所定の記述をし,irbを実行すると,大量のエラーメッセージが出てきまして,プロンプトが出ずに終了しました.
エラーの先頭は

(略)/home/takehiko/.irbrc:2:in `require': (略)lib/ruby/gems/1.9.1/gems/wirble-0.1.2/wirble.rb:141: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n' (SyntaxError)
            when ':': state << :symbol
                     ^

とのことで,該当箇所(141行目)の前後を見てみると,

          case state[-1]
          when nil
            case c
            when ':': state << :symbol
            when '"': state << :string
            when '#': state << :object
            when /[a-z]/i
              state << :keyword
              repeat = true
            when /[0-9-]/
              state << :number
              repeat = true
            when '{': yield :open_hash, '{'

となっていました.「when 式:」のコロンがまずいのですね.
Emacsのquery-replaceを利用して,慎重に,書いてはいけない「:」を「;」に置き換えてから*1Ruby 1.9で厳格化したということでしょうか.

*1:「: 」を「; 」に置き換えればいいようです.12箇所ありました.),irbを実行すれば,うまくいきました. その直後,仕事用の自作スクリプトにも同じエラーが多数あったのにはびっくり. 一つ一つ手直ししましたが…あのRuby 1.9の簡易lintにチェック項目を追加したいものです. C言語のswitch〜caseでは「case 値:」と,コロンをつける必要があったので,それに引きずられたわけですが,それにしても,Rubyのマニュアルについて,「when 式:」とするような記述は,探した限りで見つかりませんでした((http://www.kansai.anesth.or.jp/gijutu/ruby/man-z1/refm0021.htmlには,「when 式;」とする例があります.現在では,例えばhttp://doc.loveruby.net/refm/api/view/spec/controlを見ると「when 式 then」を使ったコードに置き換わっています.