The three current backends that convert Perl opcodes into some other format are all emphatically experimental. (Yes, we said this before, but we don't want you to forget.) Even when they happen to produce output that runs correctly, the resulting programs may take more disk space, more memory, and more CPU time than than they would ordinarily. This is an area of ongoing research and development. Things will get better.
B::Bytecode module writes the
parse tree's opcodes out in a platform-independent encoding. You can
take a Perl script compiled down to bytecodes and copy that to any
other machine with Perl installed on it.
The standard but currently experimental perlcc (1) command knows how to convert Perl source code into a byte-compiled Perl program. All you have to do is:
perlcc -b -o pbyscript srcscript
And now you should be able to directly "execute" the resulting pbyscript. The start of that file looks somewhat like this:
#!/usr/bin/perl use ByteLoader 0.03; ^C^@^E^A^C^@^@^@^A^F^@^C^@^@^@^B^F^@^C^@^@^@^C^F^@^C^@^@^@ B^@^@^@^H9^A8M-^?M-^?M-^?M-^?7M-^?M-^?M-^?M-^?6^@^@^@^A6^@ ^G^D^D^@^@^@^KR^@^@^@^HS^@^@^@^HV^@M-2W<^FU^@^@^@^@X^Y@Z^@ …
There you find a small script header followed by
purely binary data. This may seem like deep magic, but its dweomer,
er, dwimmer is at most a minor one. The
ByteLoader module uses a technique called a
source filter to alter the source code before Perl gets a chance to see it. A source filter is a kind ...