
Issue #20400 has been updated by nobu (Nobuyoshi Nakada). `BEGIN` blocks are: a. executed in the order they appeared in the same nesting level. b. executed in prior to outside the block.
```ruby BEGIN { print "1" BEGIN { print "2" } } ```
"2" is first because it is in the inner `BEGIN` in the block for "1".
```ruby BEGIN { print "1" BEGIN { print "2" } BEGIN { print "3" } } ```
Ditto, just there are multiple `BEGIN` blocks inside the same `BEGIN`.
```ruby BEGIN { print "1" BEGIN { print "2" BEGIN { print "3" } } BEGIN { print "4" } } ```
"3" is executed prior to "2", because it is inside the block for "2", and the rest are same as the previous example.
Is this intentional?
This explanation makes sense? Anyway, tests should be improved. ---------------------------------------- Bug #20400: Nested BEGIN{} execution order https://bugs.ruby-lang.org/issues/20400#change-107532 * Author: kddnewton (Kevin Newton) * Status: Open * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- Right now there are specs for the order in which `BEGIN{}` should be executed, which is the order they appear in the file. For example: ```ruby BEGIN { print "1" } print "4" BEGIN { print "2" } print "5" BEGIN { print "3" } ``` should output "12345". However, I couldn't find any tests/specs on what happens when `BEGIN{}` is nested. The order appears to be somewhat confusing, so I wanted to clarify if it was intentional or a bug. For example: ```ruby BEGIN { print "1" BEGIN { print "2" } } ``` prints "21", and: ```ruby BEGIN { print "1" BEGIN { print "2" } BEGIN { print "3" } } ``` prints "231", and finally: ```ruby BEGIN { print "1" BEGIN { print "2" BEGIN { print "3" } } BEGIN { print "4" } } ``` prints "3241". Is this intentional? -- https://bugs.ruby-lang.org/