Masahiro Kitajima
katon****@katon*****
2006年 5月 31日 (水) 23:08:22 JST
残念ながら、現状の Exerb ではそうなっちゃいますね。 ---- test.rb ---- s=<<EOS while line = DATA.gets do print line end __END__ test_data1 test_data2 EOS eval(s) ---- test.rb ---- #=> test.rb:10: (eval):1: uninitialized constant DATA (NameError) これと同じ現象だと思います。 # 定数 DATA を定義するのは ruby.c:load_file() ですが、 # exerb_execute() から呼ばれる # exerb_load_ruby_script(const FILE_ENTRY_HEADER *file_entry) は、 # eval を使っているので。 Exerb 側の対応案を Ruby で表現してみました。 require 'stringio' if /^__END__\n(.*)\Z/m =~ s Object.const_set('DATA', StringIO.new($1)) end eval(s) -- 北島雅博(かとんぼ)