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!
- -H
- 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.
- -i includeall
- 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.
- -b savebegin
- Save all the BEGIN blocks.
Normally only BEGIN blocks that
"require" other files (ex.
"use Foo;") or push|unshift to
@INC are saved.
- -k
- Keep the syntax tree - it is stripped by default.
- -ooutfile
- Put the bytecode in <outfile> instead of dumping it to STDOUT.
- -s
- Scan the script for "# line .."
directives and for <goto LABEL> expressions. When gotos are found
keep the syntax tree.
- -S
- Output assembler source rather than piping it through the assembler and
outputting bytecode. Without "-q" the
assembler source is commented.
- -m
- 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.
- -upackage
- "use package." Might be needed of the package is not
automatically detected.
- -Ffile
- 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.
- -q
- Be quiet.
- -v
- Be verbose.
- -TI
- Restore full @INC for running within the CORE
testsuite.
- -TF cop file
- Set the COP file - for running within the CORE testsuite.
- -Do
- OPs, prints each OP as it's processed
- -DM
- Debugging flag for more verbose STDERR output.
M for Magic and Matches.
- -DG
- Debug GV's
- -DA
- Set developer Assertions, to help find possible obj-indices out of
range.
- 5.10 threaded fails with setting the wrong MATCH op_pmflags 5.10
non-threaded fails calling anoncode, ...
- "BEGIN { goto A: while 1; A: }" won't
even compile.
- "?...?" and
"reset" do not work as expected.
- variables in "(?{ ... })" constructs are
not properly scoped.
- Scripts that use source filters will fail miserably.
- Special GV's fail.
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