FAQ 3.22 How can I compile my Perl program into byte code or C?

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

This message is one of several periodic postings to comp.lang.perl.misc
intended to make it easier for perl programmers to find answers to
common questions. The core of this message represents an excerpt
from the documentation provided with Perl.


3.22: How can I compile my Perl program into byte code or C?

    Malcolm Beattie has written a multifunction backend compiler, available
    from CPAN, that can do both these things. It is included in the
    perl5.005 release, but is still considered experimental. This means it's
    fun to play with if you're a programmer but not really for people
    looking for turn-key solutions.

    Merely compiling into C does not in and of itself guarantee that your
    code will run very much faster. That's because except for lucky cases
    where a lot of native type inferencing is possible, the normal Perl
    run-time system is still present and so your program will take just as
    long to run and be just as big. Most programs save little more than
    compilation time, leaving execution no more than 10-30% faster. A few
    rare programs actually benefit significantly (even running several times
    faster), but this takes some tweaking of your code.

    You'll probably be astonished to learn that the current version of the
    compiler generates a compiled form of your script whose executable is
    just as big as the original perl executable, and then some. That's
    because as currently written, all programs are prepared for a full
    eval() statement. You can tremendously reduce this cost by building a
    shared *libperl.so* library and linking against that. See the INSTALL
    podfile in the Perl source distribution for details. If you link your
    main perl binary with this, it will make it minuscule. For example, on
    one author's system, /usr/bin/perl is only 11k in size!

    In general, the compiler will do nothing to make a Perl program smaller,
    faster, more portable, or more secure. In fact, it can make your
    situation worse. The executable will be bigger, your VM system may take
    longer to load the whole thing, the binary is fragile and hard to fix,
    and compilation never stopped software piracy in the form of crackers,
    viruses, or bootleggers. The real advantage of the compiler is merely
    packaging, and once you see the size of what it makes (well, unless you
    use a shared *libperl.so*), you'll probably want a complete Perl install


Documents such as this have been called "Answers to Frequently
Asked Questions" or FAQ for short.  They represent an important
part of the Usenet tradition.  They serve to reduce the volume of
redundant traffic on a news group by providing quality answers to
questions that keep coming up.

If you are some how irritated by seeing these postings you are free
to ignore them or add the sender to your killfile.  If you find
errors or other problems with these postings please send corrections
or comments to the posting email address or to the maintainers as
directed in the perlfaq manual page.

Note that the FAQ text posted by this server may have been modified
from that distributed in the stable Perl release.  It may have been
edited to reflect the additions, changes and corrections provided
by respondents, reviewers, and critics to previous postings of
these FAQ. Complete text of these FAQ are available on request.

The perlfaq manual page contains the following copyright notice.


    Copyright (c) 1997-2002 Tom Christiansen and Nathan
    Torkington, and other contributors as noted. All rights

This posting is provided in the hope that it will be useful but
does not represent a commitment or contract of any kind on the part
of the contributers, authors or their agents.

Site Timeline