Search code examples
perlinterpreted-languagecompiled-language

Is Perl a compiled or an interpreted programming language?


Is Perl compiled or interpreted?


Solution

  • Well, that depends on what you mean by a compiled language. Maybe this is why googling did not bring forth a clear answer to your question.

    One viewpoint is that compilation means compiling from a source code description to another, i.e. code generation.

    If we accept these premises, then Perl 6 can be compiled and Perl 5 and older are interpreted languages.

    Perl 6 is specifically compiled to Parrot bytecode. Perl 6 is therefore a properly compiled language, in the same way say, Java is.

    Perl 5 and older parses the Perl source code to an internal list or tree, but I don't think it should be called a proper compiler, except maybe in a theoretical sense. It does not output any bytecode, assembly or real machine code usually associated with compilers. The parsing stage of Perl to check Perl syntax used to be called "compiling" the source. It is used to check the syntactical validity of a Perl source file without running it.

    It is invoked as:

    perl -c myprog.pl
    

    But if you look at the help for Perl options, -c actually stands for "check".

    -c                check syntax only (runs BEGIN and CHECK blocks)
    

    (To further complicate things, Perl 5 had support for writing out internal bytecode but it was removed in version 5.10. Presumably because it was buggy, I don't know.)

    On the other hand, if you argue that compilation is the act of parsing a source tree into any other kind of representation, well, that parsing makes Perl a compiled language. Perl must completely parse a source file before it can start executing it. By this definition, any language which can start executing a source file immediately before parsing would be an interpreted language.

    A third way to look at this is from how these words, "interpreted" and "compiled" are most often used by professionals in the field. I would bet good money that if a random subset of programmers were asked to choose "compiled" or "interpreted" when thinking of Perl, most would choose "interpreted". Not because of some theoretical argument over the nature of Perl, but because "compiled" usually invokes thoughts of "compiling", "linking", "object code" etc, while "interpreted" is taken to mean "write the code, try it". Right or wrong, that may be good to know when trying to determine if Perl is, truly, interpreted or in fact, compiled. You are going to run into many arguments on your quest.