🐙
[Bug #20400] BEGIN がネストしている場合の挙動に関するチケット
[Bug #20400] Nested BEGIN{} execution order
-
BEGIN
は通常、定義された順番に実行される
BEGIN { print "1" }
print "4"
BEGIN { print "2" }
print "5"
BEGIN { print "3" }
# => 12345
- しかし、以下のように
BEGIN
がネストしたときの仕様がドキュメント化されていないらしい
BEGIN {
print "1"
BEGIN { print "2" }
}
# => 21
BEGIN {
print "1"
BEGIN { print "2" }
BEGIN { print "3" }
}
# => 231
BEGIN {
print "1"
BEGIN {
print "2"
BEGIN { print "3" }
}
BEGIN { print "4" }
}
# => 3241
- これが意図する挙動なのかどうかというチケット
- これは以下のようなルールで実行されるらしい
- a. 同じネストレベルに出現した順序で実行される
- b. ブロックの外より先に実行される
- と、言うことで現状の挙動自体は一貫しているとコメントされている
Discussion