[#37021] [RAA] RAA/2.3 — "U.Nakamura" <usa@...>

みなさんこんにちは。

20 messages 2003/01/30

[ruby-list:36972] Re: ERB2 bug?

From: m_seki@...
Date: 2003-01-19 15:35:56 UTC
List: ruby-list #36972
咳といいます。

> ERB2で動作がおかしいんですがバグでしょうか?
> 
> 以下のeRubyコード(test.rhtml)をbin/erbに入力すると'<%>'という変なコード
> が出力されてしまいます。
> 
> [test.rhtml]
> ----------------------------------------------------------------
> <%=
> [ '%%>', '%%>', '%%>' ].join 
> %>
> 
> <%
> %>
> ----------------------------------------------------------------
> 
> [出力]
> ----------------------------------------------------------------
> $ erb -x test.rhtml
> _erbout = ''; _erbout.concat((
> [ '%>', '%>', '%>' ].join
> <%>).to_s); _erbout.concat "\n"
> 
> <%>
> _erbout;
> ----------------------------------------------------------------

わかりにくいけど仕様です。# 咳も完全に忘れていました。

erubyの様に%ではじまる行もスクリプトとして扱う機能を追加したの
ですが、bin/erb ではデフォルトでそれが有効になってます。
 (注: ERBクラスではデフォルトで無効)

-Pオプションで%ではじまる行をスクリプトとみなさなくなります。

* bin/erb -P で無効に…
----------------------------------------------------------------
$ erb18 -x -P test.rhtml
_erbout = ''; _erbout.concat((
[ '%>', '%>', '%>' ].join 
).to_s); _erbout.concat "\n"
_erbout.concat "\n"

_erbout.concat "\n"
_erbout; 
----------------------------------------------------------------


* ERB.new ではデフォルトで無効
----------------------------------------------------------------
$ irb18 -r erb
irb(main):001:0> s = File.open('test.rhtml') {|fp| fp.read}
=> "<%=\n[ '%%>', '%%>', '%%>' ].join \n%>\n\n<%\n%>\n"
irb(main):002:0> puts (ERB.new(s).src)
_erbout = ''; _erbout.concat((
[ '%>', '%>', '%>' ].join 
).to_s); _erbout.concat "\n"
_erbout.concat "\n"

_erbout.concat "\n"
_erbout; 
=> nil
----------------------------------------------------------------


デフォルトで無効の方がいいのかなあ。

In This Thread