From: Koji Arai Date: 1999-06-23T00:32:50+09:00 Subject: [ruby-dev:7173] [BUG] <<`HERE_DOC` 新井です。 1.2.6リリースを契機にちょっといじってたらバグを見 つけてしまいました。スミマセン(--;。 1.3.4-990611も同様なんですが cmd = "echo test" puts `echo test1` puts `#{cmd}2` puts <<`END` echo test3 echo test3 echo test3 # bug1 最後の行だけ実行される END puts <<`END` # bug2 コマンドが実行されない(文字列になる) #{cmd}4 END 上記の結果が test1 test2 test3 echo test4 となります。 以下、1.3.4のパッチなんだけどこれでいいのかなぁ? Index: parse.y =================================================================== RCS file: /home/cvs/ruby/parse.y,v retrieving revision 1.1.1.3.2.24 diff -u -r1.1.1.3.2.24 parse.y --- parse.y 1999/06/09 09:21:26 1.1.1.3.2.24 +++ parse.y 1999/06/22 15:24:59 @@ -2388,10 +2388,12 @@ } break; case tDSTRING: + if (!list) list = NEW_DSTR(str); case tDXSTRING: + if (!list) list = NEW_DXSTR(str); + list_append(yylval.node, NEW_STR(rb_str_new2("\n"))); nd_set_type(yylval.node, NODE_STR); - if (!list) list = NEW_DSTR(str); yylval.node = NEW_LIST(yylval.node); yylval.node->nd_next = yylval.node->nd_head->nd_next; list_concat(list, yylval.node); @@ -2427,6 +2429,7 @@ return tSTRING; case '`': if (list) return tDXSTRING; + yylval.val = str; return tXSTRING; } return 0; あっ /* fall through */ って書くのを忘れてた。