B::Bytecode - Perl compiler's bytecode backend
perl -MO=Bytecode[,-H][,-oscript.plc] script.pl
Compiles a Perl script into a bytecode format that could be loaded later by the ByteLoader module and executed as a regular Perl script. This saves time for the optree parsing and compilation and space for the sourcecode in memory.
$ perl -MO=Bytecode,-H,-ohi -e 'print "hi!\n"' $ perl hi hi!
Prepend a use ByteLoader VERSION;
line to the produced bytecode. This way you will not need to add -MByteLoader
to your perl command-line.
Beware: This option does not yet work with 5.18 and higher. You need to use -MByteLoader
still.
Include all used packages and its symbols. Does no run-time require from BEGIN blocks (use
package).
This creates bigger and more independent code, but is more error prone and does not support pre-compiled .pmc
modules.
It is highly recommended to use -i
together with -b
safebegin.
Save all the BEGIN blocks.
Normally only BEGIN blocks that require
other files (ex. use Foo;
) or push|unshift to @INC are saved.
Keep the syntax tree - it is stripped by default.
Put the bytecode in <outfile> instead of dumping it to STDOUT.
Scan the script for # line ..
directives and for <goto LABEL> expressions. When gotos are found keep the syntax tree.
Output assembler source rather than piping it through the assembler and outputting bytecode. Without -q
the assembler source is commented.
Compile to a .pmc module rather than to a single standalone .plc program.
Currently this just means that the bytecodes for initialising main_start
, main_root
, main_cv
and curpad
are omitted.
"use package." Might be needed of the package is not automatically detected.
Include file. If not -i
define all symbols in the given included source file. -i
would all included files, -F
only a certain file - full path needed.
Be quiet.
Be verbose.
Restore full @INC for running within the CORE testsuite.
Set the COP file - for running within the CORE testsuite.
OPs, prints each OP as it's processed
Debugging flag for more verbose STDERR output.
M for Magic and Matches.
Debug GV's
Set developer Assertions, to help find possible obj-indices out of range.
BEGIN { goto A: while 1; A: }
won't even compile.?...?
and reset
do not work as expected.(?{ ... })
constructs are not properly scoped.There are also undocumented bugs and options.
Originally written by Malcolm Beattie 1996 and modified by Benjamin Stuhl <sho_pi@hotmail.com>.
Rewritten by Enache Adrian <enache@rdslink.ro>, 2003 a.d.
Enhanced by Reini Urban <rurban@cpan.org>, 2008-2012