Rafael Garcia-Suarez wrote:

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>

Reply via email to