From: Koji Arai Date: 2003-10-06T13:16:43+09:00 Subject: [ruby-dev:21513] Re: eval BEGIN/END at runtime 新井です。 In message "[ruby-dev:21510] Re: eval BEGIN/END at runtime" on 06 Oct 2003 11:51:15 +0900, "NAKAMURA, Hiroshi" wrote: > なひです。 > > > From: "Yukihiro Matsumoto" > > Sent: Monday, October 06, 2003 11:26 AM > > > |runtime(ここでは初期のBEGIN群の実行が終わった後)に、 > > |eval("BEGIN { p 1 }")とすると、その場で実行されます。 > > |eval("END { p 1 }")のほうは、インタプリタ全体の終了時に、 > > |規定の順序で実行されます。 > > > > |これは仕様ということでよいでしょうか。あるいは不定? > > > > 仕様のつもりです。 > > 了解です。テストに入れておきます。 ちょっと思い出してしまったのですが、以下はかなり昔からなので すがどういう理由なのでしょう? # これがわからなくてマニュアルでも不明瞭にしてます 実行されるかどうかわからない END はエラーにしてる? eval < -:1: compile error (SyntaxError) (eval):2: END in method; use at_exit ruby 1.8.0 (2003-10-05) [i586-linux] 思い出しついでにENDのネストが二重までしか許さないのは意図的 でしょうか? END { print 1; END { print 2; END { print 3; } } } => ruby 1.8.0 (2003-10-05) [i586-linux] 12 ネストした END が最後に回されるのも仕様でしょうか? なんとなく、35421 を期待したのですがそうじゃないとしても 別に困りませんが。 END { print 1; } END { print 2; } END { print 3; END { print 4; } END { print 5; } } => ruby 1.8.0 (2003-10-05) [i586-linux] 32154 今試してみたら perl(5.8.0) は 35421 ですね。 -- 新井康司 (Koji Arai)