=over =item ${^GLOBAL_PHASE} X<${^GLOBAL_PHASE}> The current phase of the perl interpreter. Possible values are: =over 8 =item CONSTRUCT The C is being constructed via C. This value is mostly there for completeness and for use via the underlying C variable C. It's not really possible for Perl code to be executed unless construction of the interpreter is finished. =item START This is the global compile-time. That includes, basically, every C block executed directly or indirectly from during the compile-time of the top-level program. This phase is not called "BEGIN" to avoid confusion with C-blocks, as those are executed during compile-time of any compilation unit, not just the top-level program. A new, localised compile-time entered at run-time, for example by constructs as C are not global interpreter phases, and therefore aren't reflected by C<${^GLOBAL_PHASE}>. =item CHECK Execution of any C blocks. =item INIT Similar to "CHECK", but for C-blocks, not C blocks. =item RUN The main run-time, i.e. the execution of C. =item END Execution of any C blocks. =item DESTRUCT Global destruction. =back Also note that there's no value for UNITCHECK-blocks. That's because those are run for each compilation unit individually, and therefore is not a global interpreter phase. Not every program has to go through each of the possible phases, but transition from one phase to another can only happen in the order described in the above list. An example of all of the phases Perl code can see: BEGIN { print "compile-time: ${^GLOBAL_PHASE}\n" } INIT { print "init-time: ${^GLOBAL_PHASE}\n" } CHECK { print "check-time: ${^GLOBAL_PHASE}\n" } { package Print::Phase; sub new { my ($class, $time) = @_; return bless \$time, $class; } sub DESTROY { my $self = shift; print "$$self: ${^GLOBAL_PHASE}\n"; } } print "run-time: ${^GLOBAL_PHASE}\n"; my $runtime = Print::Phase->new( "lexical variables are garbage collected before END" ); END { print "end-time: ${^GLOBAL_PHASE}\n" } our $destruct = Print::Phase->new( "package variables are garbage collected after END" ); This will print out compile-time: START check-time: CHECK init-time: INIT run-time: RUN lexical variables are garbage collected before END: RUN end-time: END package variables are garbage collected after END: DESTRUCT This variable was added in Perl 5.14.0. =back