🐙

[Bug #20400] BEGIN がネストしている場合の挙動に関するチケット

2024/03/31に公開

[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. ブロックの外より先に実行される
  • と、言うことで現状の挙動自体は一貫しているとコメントされている
GitHubで編集を提案

Discussion