errout = ARGV.shift

BEGIN {
  puts "b1"
  local_begin1 = "local_begin1"
  $global_begin1 = "global_begin1"
  ConstBegin1 = "ConstBegin1"
}

BEGIN {
  puts "b2"

  BEGIN {
    puts "b2-1"
  }
}

# for scope check
raise if defined?(local_begin1)
raise unless defined?($global_begin1)
raise unless defined?(::ConstBegin1)
local_for_end2 = "e2"
$global_for_end1 = "e1"

puts "main"

END {
  puts local_for_end2	# e2
}

eval <<EOE
  BEGIN {
    puts "b3"

    BEGIN {
      puts "b3-1"
    }
  }

  BEGIN {
    puts "b4"
  }

  END {
    puts "e3"
  }

  END {
    puts "e4"

    END {
      puts "e4-1"

      END {
	puts "e4-1-1"
      }
    }

    END {
      puts "e4-2"
    }
  }
EOE

END {
  exit
  puts "should not be dumped"

  END {
    puts "not reached"
  }
}

END {
  puts $global_for_end1	# e1

  END {
    puts "e1-1"
  }
}
