erbコマンドは行頭の%を認識するが、ERB.newのデフォルトは認識しない件
Ruby標準添付のeRuby実装のerb。これはerbコマンドにもなっていてシェルから実行できる。
たとえば、こんなeRubyスクリプトをerbで実行すると、「1 + 1 = 2」と出てくる。
% a = 1 <%=a %> + <%=a %> = <%=a+a %>
一方、ERB.new(eruby_script).resultで実行したときは、行頭の%を認識しないので注意が必要だ。ERB.new(eruby_script, 0, '%')と第3引数に「%」を入れないと行頭の%を認識してくれない。
ちなみにClass.newしてるのは、新たなローカル変数の名前空間を作成するため。
require 'erb' src = File.read "percent.test.rtxt" Class.new do ERB.new(src, 0, '%').result binding # => "1 + 1 = 2\n" end Class.new do ERB.new(src).result binding rescue $! # => #<NameError: undefined local variable or method `a' for #<Class:0xb7dd4fc0>> end `erb percent.test.rtxt` # => "1 + 1 = 2\n"
行頭の%は%をコメントにしている言語(LaTeXなど)と相性が悪いからデフォルトでオフになっているのだろう。しかし、erbコマンドと動作が異なるのは一貫性がなくてどうかと思う……あやうくはまるところだった。