It looks not correct to my perl 5 trained eyes. BEGIN is designed to let things run as early as possible, mostly for Perl programs to discover things about the environment they're running in. That's a different environment than the environment they were compiled in. For example :
my $use_debug_mode = BEGIN { %*ENV{DEBUGME} ?? 1 :: 0 };
According to S04 you'd use INIT block for that. INIT is run at run time, ASAP. But BEGIN is run at compile time, ASAP.
My example code: use v6; my $compile_begin_time = BEGIN { time() } my $compile_end_time = CHECK { time() } my $run_begin_time = INIT { time() } my %compile_time_environment = BEGIN { %*ENV } my %run_time_environment = INIT { %*ENV }
(this list from http://dev.perl.org/perl6/synopsis/S04.html )
BEGIN {...}* at compile time, ASAP CHECK {...}* at compile time, ALAP INIT {...}* at run time, ASAP END {...} at run time, ALAP FIRST {...}* at first block entry time ENTER {...}* at every block entry time LEAVE {...} at every block exit time KEEP {...} at every successful block exit UNDO {...} at every unsuccessful block exit NEXT {...} at loop continuation time LAST {...} at loop termination time PRE {...} assert precondition at every block entry POST {...} assert postcondition at every block exit CATCH {...} catch exceptions CONTROL {...} catch control exceptions
-- Markus Laire <Jam. 1:5-6>