diff options
Diffstat (limited to 'pod')
-rw-r--r-- | pod/perldebug.pod | 12 | ||||
-rw-r--r-- | pod/perldiag.pod | 6 | ||||
-rw-r--r-- | pod/perlfunc.pod | 8 | ||||
-rw-r--r-- | pod/perlmod.pod | 58 | ||||
-rw-r--r-- | pod/perlrun.pod | 8 | ||||
-rw-r--r-- | pod/perlsub.pod | 13 |
6 files changed, 60 insertions, 45 deletions
diff --git a/pod/perldebug.pod b/pod/perldebug.pod index 2e21941db0..390eb96782 100644 --- a/pod/perldebug.pod +++ b/pod/perldebug.pod @@ -956,12 +956,12 @@ for incredibly long examples of these. =head2 Debugging compile-time statements If you have compile-time executable statements (such as code within -BEGIN and CHECK blocks or C<use> statements), these will I<not> be -stopped by debugger, although C<require>s and INIT blocks will, and -compile-time statements can be traced with C<AutoTrace> option set -in C<PERLDB_OPTS>). From your own Perl code, however, you can -transfer control back to the debugger using the following statement, -which is harmless if the debugger is not running: +BEGIN, UNITCHECK and CHECK blocks or C<use> statements), these will +I<not> be stopped by debugger, although C<require>s and INIT blocks +will, and compile-time statements can be traced with C<AutoTrace> +option set in C<PERLDB_OPTS>). From your own Perl code, however, you +can transfer control back to the debugger using the following +statement, which is harmless if the debugger is not running: $DB::single = 1; diff --git a/pod/perldiag.pod b/pod/perldiag.pod index d5e44c794e..59a974877e 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -1641,9 +1641,9 @@ Check the #! line, or manually feed your script into Perl yourself. =item %s failed--call queue aborted -(F) An untrapped exception was raised while executing a CHECK, INIT, or -END subroutine. Processing of the remainder of the queue of such -routines has been prematurely ended. +(F) An untrapped exception was raised while executing a UNITCHECK, +CHECK, INIT, or END subroutine. Processing of the remainder of the +queue of such routines has been prematurely ended. =item False [] range "%s" in regex; marked by <-- HERE in m/%s/ diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index cda8f56e36..63d7399cc9 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -5007,8 +5007,8 @@ array by 1 and moving everything down. If there are no elements in the array, returns the undefined value. If ARRAY is omitted, shifts the C<@_> array within the lexical scope of subroutines and formats, and the C<@ARGV> array outside of a subroutine and also within the lexical scopes -established by the C<eval STRING>, C<BEGIN {}>, C<INIT {}>, C<CHECK {}> -and C<END {}> constructs. +established by the C<eval STRING>, C<BEGIN {}>, C<INIT {}>, C<CHECK {}>, +C<UNITCHECK {}> and C<END {}> constructs. See also C<unshift>, C<push>, and C<pop>. C<shift> and C<unshift> do the same thing to the left end of an array that C<pop> and C<push> do to the @@ -7238,8 +7238,8 @@ looking for no value (void context). return wantarray ? @a : "@a"; C<wantarray()>'s result is unspecified in the top level of a file, -in a C<BEGIN>, C<CHECK>, C<INIT> or C<END> block, or in a C<DESTROY> -method. +in a C<BEGIN>, C<UNITCHECK>, C<CHECK>, C<INIT> or C<END> block, or +in a C<DESTROY> method. This function should have been named wantlist() instead. diff --git a/pod/perlmod.pod b/pod/perlmod.pod index 513460943d..240630c685 100644 --- a/pod/perlmod.pod +++ b/pod/perlmod.pod @@ -258,12 +258,12 @@ rather than: This also has implications for the use of the SUPER:: qualifier (see L<perlobj>). -=head2 BEGIN, CHECK, INIT and END -X<BEGIN> X<CHECK> X<INIT> X<END> +=head2 BEGIN, UNITCHECK, CHECK, INIT and END +X<BEGIN> X<UNITCHECK> X<CHECK> X<INIT> X<END> -Four specially named code blocks are executed at the beginning and at the end -of a running Perl program. These are the C<BEGIN>, C<CHECK>, C<INIT>, and -C<END> blocks. +Five specially named code blocks are executed at the beginning and at +the end of a running Perl program. These are the C<BEGIN>, +C<UNITCHECK>, C<CHECK>, C<INIT>, and C<END> blocks. These code blocks can be prefixed with C<sub> to give the appearance of a subroutine (although this is not considered good style). One should note @@ -282,9 +282,10 @@ and such from other files in time to be visible to the rest of the compile and run time. Once a C<BEGIN> has run, it is immediately undefined and any code it used is returned to Perl's memory pool. -It should be noted that C<BEGIN> code blocks B<are> executed inside string -C<eval()>'s. The C<CHECK> and C<INIT> code blocks are B<not> executed inside -a string eval, which e.g. can be a problem in a mod_perl environment. +It should be noted that C<BEGIN> and C<UNITCHECK> code blocks B<are> +executed inside string C<eval()>'s. The C<CHECK> and C<INIT> code +blocks are B<not> executed inside a string eval, which e.g. can be a +problem in a mod_perl environment. An C<END> code block is executed as late as possible, that is, after perl has finished running the program and just before the interpreter @@ -307,8 +308,15 @@ value of the program. Beware of changing C<$?> by accident (e.g. by running something via C<system>). X<$?> -C<CHECK> and C<INIT> code blocks are useful to catch the transition between -the compilation phase and the execution phase of the main program. +C<UNITCHECK>, C<CHECK> and C<INIT> code blocks are useful to catch the +transition between the compilation phase and the execution phase of +the main program. + +C<UNITCHECK> blocks are run just after the unit which defined them has +been compiled. The main program file and each module it loads are +compilation units, as are string C<eval>s, code compiled using the +C<(?{ })> construct in a regex, calls to C<do FILE>, C<require FILE>, +and code after the C<-e> switch on the command line. C<CHECK> code blocks are run just after the B<initial> Perl compile phase ends and before the run time begins, in LIFO order. C<CHECK> code blocks are used @@ -331,26 +339,32 @@ The B<begincheck> program makes it all clear, eventually: # begincheck - print " 8. Ordinary code runs at runtime.\n"; + print "10. Ordinary code runs at runtime.\n"; - END { print "14. So this is the end of the tale.\n" } - INIT { print " 5. INIT blocks run FIFO just before runtime.\n" } - CHECK { print " 4. So this is the fourth line.\n" } + END { print "16. So this is the end of the tale.\n" } + INIT { print " 7. INIT blocks run FIFO just before runtime.\n" } + UNITCHECK { + print " 4. And therefore before any CHECK blocks.\n" + } + CHECK { print " 6. So this is the sixth line.\n" } - print " 9. It runs in order, of course.\n"; + print "11. It runs in order, of course.\n"; BEGIN { print " 1. BEGIN blocks run FIFO during compilation.\n" } - END { print "13. Read perlmod for the rest of the story.\n" } - CHECK { print " 3. CHECK blocks run LIFO at compilation's end.\n" } - INIT { print " 6. Run this again, using Perl's -c switch.\n" } + END { print "15. Read perlmod for the rest of the story.\n" } + CHECK { print " 5. CHECK blocks run LIFO after all compilation.\n" } + INIT { print " 8. Run this again, using Perl's -c switch.\n" } - print "10. This is anti-obfuscated code.\n"; + print "12. This is anti-obfuscated code.\n"; - END { print "12. END blocks run LIFO at quitting time.\n" } + END { print "14. END blocks run LIFO at quitting time.\n" } BEGIN { print " 2. So this line comes out second.\n" } - INIT { print " 7. You'll see the difference right away.\n" } + UNITCHECK { + print " 3. UNITCHECK blocks run LIFO after each file is compiled.\n" + } + INIT { print " 9. You'll see the difference right away.\n" } - print "11. It merely _looks_ like it should be confusing.\n"; + print "13. It merely _looks_ like it should be confusing.\n"; __END__ diff --git a/pod/perlrun.pod b/pod/perlrun.pod index a0115bc99d..6ac810a86b 100644 --- a/pod/perlrun.pod +++ b/pod/perlrun.pod @@ -360,10 +360,10 @@ switch was therefore "recycled".) X<-c> causes Perl to check the syntax of the program and then exit without -executing it. Actually, it I<will> execute C<BEGIN>, C<CHECK>, and -C<use> blocks, because these are considered as occurring outside the -execution of your program. C<INIT> and C<END> blocks, however, will -be skipped. +executing it. Actually, it I<will> execute C<BEGIN>, C<UNITCHECK>, +C<CHECK>, and C<use> blocks, because these are considered as occurring +outside the execution of your program. C<INIT> and C<END> blocks, +however, will be skipped. =item B<-d> X<-d> X<-dt> diff --git a/pod/perlsub.pod b/pod/perlsub.pod index 083b9a8af8..f11f1ae713 100644 --- a/pod/perlsub.pod +++ b/pod/perlsub.pod @@ -227,10 +227,10 @@ indirectly by the run-time system itself, usually due to a triggered event. Subroutines that do special, pre-defined things include C<AUTOLOAD>, C<CLONE>, C<DESTROY> plus all functions mentioned in L<perltie> and L<PerlIO::via>. -The C<BEGIN>, C<CHECK>, C<INIT> and C<END> subroutines are not so much -subroutines as named special code blocks, of which you can have more -than one in a package, and which you can B<not> call explicitly. See -L<perlmod/"BEGIN, CHECK, INIT and END"> +The C<BEGIN>, C<UNITCHECK>, C<CHECK>, C<INIT> and C<END> subroutines +are not so much subroutines as named special code blocks, of which you +can have more than one in a package, and which you can B<not> call +explicitly. See L<perlmod/"BEGIN, UNITCHECK, CHECK, INIT and END"> =head2 Private Variables via my() X<my> X<variable, lexical> X<lexical> X<lexical variable> X<scope, lexical> @@ -521,8 +521,9 @@ starts to run: } } -See L<perlmod/"BEGIN, CHECK, INIT and END"> about the -special triggered code blocks, C<BEGIN>, C<CHECK>, C<INIT> and C<END>. +See L<perlmod/"BEGIN, UNITCHECK, CHECK, INIT and END"> about the +special triggered code blocks, C<BEGIN>, C<UNITCHECK>, C<CHECK>, +C<INIT> and C<END>. If declared at the outermost scope (the file scope), then lexicals work somewhat like C's file statics. They are available to all |