B::Bytecode(3)

NAME
B::Bytecode - Perl compiler's bytecode backend

SYNOPSIS
perl -MO=Bytecode[,-H][,-oscript.plc] script.pl

DESCRIPTION
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.

EXAMPLE
    $ perl -MO=Bytecode,-H,-ohi -e 'print "hi!\n"'
    $ perl hi
    hi!

OPTIONS

-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.

KNOWN BUGS

•   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.

NOTICE
There are also undocumented bugs and options.

AUTHORS
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