run. Since version 5.005, Perl has shipped with a module
capable of inspecting the optimized parse tree (C<B>), and this has
been used to write many useful utilities, including a module that lets
-you turn your Perl into C source code that can be compiled into an
+you turn your Perl into C source code that can be compiled into a
native executable.
The C<B> module provides access to the parse tree, and other modules
before producing any other output.
-=head2 The Cross Referencing Back End (B::Xref)
+=head2 The Cross Referencing Back End
-The cross referencing back end produces a report on your program,
+The cross referencing back end (B::Xref) produces a report on your program,
breaking down declarations and uses of subroutines and variables (and
formats) by file and subroutine. For instance, here's part of the
report from the I<pod2man> program that comes with Perl:
rename $was, $_ unless $was eq $_;
}
-(this is the I<rename> program that comes in the I<eg/> directory
-of the Perl source distribution).
-
The decompiler has several options for the code it generates. For
instance, you can set the size of each indent from 4 (as above) to
2 with:
See L<B::Deparse> for more information on the formatting options.
-=head2 The Lint Back End (B::Lint)
+=head2 The Lint Back End
-The lint back end inspects programs for poor style. One programmer's
-bad style is another programmer's useful tool, so options let you
-select what is complained about.
+The lint back end (B::Lint) inspects programs for poor style. One
+programmer's bad style is another programmer's useful tool, so options
+let you select what is complained about.
To run the style checker across your source code:
this functionality.
To turn a Perl program into executable byte code, you can use C<perlcc>
-with the C<-b> switch:
+with the C<-B> switch:
- perlcc -b myperlprogram.pl
+ perlcc -B myperlprogram.pl
The byte code is machine independent, so once you have a compiled
module or program, it is as portable as Perl source (assuming that
the Perl interpreter library, to allow for eval(), C<s///e>,
C<require>, etc.
-The C<perlcc> tool generates such executables when using the -opt
+The C<perlcc> tool generates such executables when using the -O
switch. To compile a Perl program (ending in C<.pl>
or C<.p>):
- perlcc -opt myperlprogram.pl
+ perlcc -O myperlprogram.pl
To produce a shared library from a Perl module (ending in C<.pm>):
- perlcc -opt Myperlmodule.pm
+ perlcc -O Myperlmodule.pm
For more information, see L<perlcc> and L<B::CC>.
+=head1 Module List for the Compiler Suite
+
=over 4
=item B
=item B::Bblock
-This module is used by the B::CC back end. It walks "basic blocks",
-whatever they may be.
+This module is used by the B::CC back end. It walks "basic blocks".
+A basic block is a series of operations which is known to execute from
+start to finish, with no possibility of branching or halting.
=item B::Bytecode
interpreted programs. See L</"The Optimized C Back End"> for
details about usage.
+=item B::Concise
+
+This module prints a concise (but complete) version of the Perl parse
+tree. Its output is more customizable than the one of B::Terse or
+B::Debug (and it can emulate them). This module useful for people who
+are writing their own back end, or who are learning about the Perl
+internals. It's not useful to the average programmer.
+
=item B::Debug
This module dumps the Perl parse tree in verbose detail to STDOUT.
=item B::Showlex
This module prints out the my() variables used in a function or a
-file. To gt a list of the my() variables used in the subroutine
+file. To get a list of the my() variables used in the subroutine
mysub() defined in the file myperlprogram:
$ perl -MO=Showlex,mysub myperlprogram
-To gt a list of the my() variables used in the file myperlprogram:
+To get a list of the my() variables used in the file myperlprogram:
$ perl -MO=Showlex myperlprogram
The optimized C backend outputs code for more modules than it should
(e.g., DirHandle). It also has little hope of properly handling
-C<goto LABEL> outside the running subroutine (C<goto &sub> is ok).
+C<goto LABEL> outside the running subroutine (C<goto &sub> is okay).
C<goto LABEL> currently does not work at all in this backend.
It also creates a huge initialization function that gives
C compilers headaches. Splitting the initialization function gives