お約束二点

string.sub(/^No¥.(\d+)/, "#{$1}番目")

とかやってもきちんと置換されない。 何故かと言うと、#{}の式展開は正規表現マッチの前に行われるから。

string.sub(/^No¥.(\d+)/) {"#{$1}番目"}

とブロックに書き換えれば正しく置換される。

まぁ、お約束なんだけどいつも忘れた頃にハマるのでメモメモ。 gsubとかeachブロックとかでまとめて置換すると一見動いてるように見えたりして罠に陥るんだよね。

ついでにevalにコードを渡した時にrescueする方法。

begin
  @result = eval(@code)
rescue SyntaxError
  @result = 'Error! (in Syntax)'
end

明示的に例外を指定しないと捕まえてくれない。