summaryrefslogtreecommitdiff
path: root/pod
diff options
context:
space:
mode:
Diffstat (limited to 'pod')
-rw-r--r--pod/perldebug.pod12
-rw-r--r--pod/perldiag.pod6
-rw-r--r--pod/perlfunc.pod8
-rw-r--r--pod/perlmod.pod58
-rw-r--r--pod/perlrun.pod8
-rw-r--r--pod/perlsub.pod13
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