Bug #20400
closedNested BEGIN{} execution order
Description
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:
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:
BEGIN {
print "1"
BEGIN { print "2" }
}
prints "21", and:
BEGIN {
print "1"
BEGIN { print "2" }
BEGIN { print "3" }
}
prints "231", and finally:
BEGIN {
print "1"
BEGIN {
print "2"
BEGIN { print "3" }
}
BEGIN { print "4" }
}
prints "3241". Is this intentional?
Updated by nobu (Nobuyoshi Nakada) 12 months ago
BEGIN
blocks are:
a. executed in the order they appeared in the same nesting level.
b. executed in prior to outside the block.
BEGIN { print "1" BEGIN { print "2" } }
"2" is first because it is in the inner BEGIN
in the block for "1".
BEGIN { print "1" BEGIN { print "2" } BEGIN { print "3" } }
Ditto, just there are multiple BEGIN
blocks inside the same BEGIN
.
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.
Updated by kddnewton (Kevin Newton) 12 months ago
- Status changed from Open to Closed
Thank you for the clarification!