From 4f25aa189c4a92535547c706ad37c13b7caee387 Mon Sep 17 00:00:00 2001 From: Gurusamy Sarathy Date: Thu, 4 Nov 1999 17:28:29 +0000 Subject: implement STOP blocks and fix compiler to use them (minimally tested) p4raw-id: //depot/perl@4515 --- pod/perlmod.pod | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'pod/perlmod.pod') diff --git a/pod/perlmod.pod b/pod/perlmod.pod index fc81fdfaae..45a82ad7a2 100644 --- a/pod/perlmod.pod +++ b/pod/perlmod.pod @@ -213,8 +213,8 @@ This also has implications for the use of the SUPER:: qualifier =head2 Package Constructors and Destructors Three special subroutines act as package -constructors and destructors. These are the C, C, and -C routines. The C is optional for these routines. +constructors and destructors. These are the C, C, C, +and C routines. The C is optional for these routines. A C subroutine is executed as soon as possible, that is, the moment it is completely defined, even before the rest of the containing file @@ -225,24 +225,31 @@ files in time to be visible to the rest of the file. Once a C has run, it is immediately undefined and any code it used is returned to Perl's memory pool. This means you can't ever explicitly call a C. -Similar to C blocks, C blocks are run just before the -Perl runtime begins execution. For example, the code generators -documented in L make use of C blocks to initialize -and resolve pointers to XSUBs. - -An C subroutine is executed as late as possible, that is, when -the interpreter is being exited, even if it is exiting as a result of -a die() function. (But not if it's polymorphing into another program -via C, or being blown out of the water by a signal--you have to -trap that yourself (if you can).) You may have multiple C blocks -within a file--they will execute in reverse order of definition; that is: -last in, first out (LIFO). +An C subroutine is executed as late as possible, that is, after +perl has finished running the program and just before the interpreter +is being exited, even if it is exiting as a result of a die() function. +(But not if it's polymorphing into another program via C, or +being blown out of the water by a signal--you have to trap that yourself +(if you can).) You may have multiple C blocks within a file--they +will execute in reverse order of definition; that is: last in, first +out (LIFO). C blocks are not executed when you run perl with the +C<-c> switch. Inside an C subroutine, C<$?> contains the value that the program is going to pass to C. You can modify C<$?> to change the exit value of the program. Beware of changing C<$?> by accident (e.g. by running something via C). +Similar to C blocks, C blocks are run just before the +Perl runtime begins execution, in "first in, first out" (FIFO) order. +For example, the code generators documented in L make use of +C blocks to initialize and resolve pointers to XSUBs. + +Similar to C blocks, C blocks are run just after the +Perl compile phase ends and before the run time begins, in +LIFO order. C blocks are again useful in the Perl compiler +suite to save the compiled state of the program. + When you use the B<-n> and B<-p> switches to Perl, C and C work just as they do in B, as a degenerate case. As currently implemented (and subject to change, since its inconvenient at best), -- cgit v1.2.1