develooper Front page | perl.perl5.porters | Postings from November 2003

[perl #24460] [DOC PATCH] the begincheck program

From:
Tom Phoenix
Date:
November 10, 2003 15:55
Subject:
[perl #24460] [DOC PATCH] the begincheck program
Message ID:
rt-24460-67287.11.9361685312796@rt.perl.org
# New Ticket Created by  Tom Phoenix 
# Please include the string:  [perl #24460]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=24460 >


This doc patch may be added to perlmod, if it succeds in its goal of
making the order of execution clearer.

--Tom Phoenix

- - - - - - - - - - - - - - - - - -

--- ./perl-5.8.2-orig/pod/perlmod.pod	Tue Sep 30 10:11:48 2003
+++ ./perl-5.8.2/pod/perlmod.pod	Mon Nov 10 08:56:10 2003
@@ -257,7 +257,8 @@

 Four special subroutines act as package constructors and destructors.
 These are the C<BEGIN>, C<CHECK>, C<INIT>, and C<END> routines.  The
-C<sub> is optional for these routines.
+C<sub> is optional for these routines. Try the B<begincheck> program, at
+the end of this section, to see them in action.

 A C<BEGIN> subroutine is executed as soon as possible, that is, the moment
 it is completely defined, even before the rest of the containing file
@@ -300,6 +301,35 @@
 Both C<BEGIN> and C<CHECK> blocks are run when you use the B<-c>
 switch for a compile-only syntax check, although your main code
 is not.
+
+The B<begincheck> program makes it all clear, eventually:
+
+  #!/usr/bin/perl
+
+  # begincheck
+
+  print " 8. Ordinary code runs at runtime.\n";
+
+  END { print "14.   So this is the end of the story.\n" }
+  INIT { print " 5. INIT blocks run FIFO just before runtime.\n" }
+  CHECK { print " 4.   So this is the fourth line.\n" }
+
+  print " 9.   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 details.\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" }
+
+  print "10.   This is anti-obfuscated code.\n";
+
+  END { print "12. 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" }
+
+  print "11.   It merely _looks_ like it should be confusing.\n";
+
+  __END__

 =head2 Perl Classes





nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About