in reply to Compilation vs Interpretation

When you present your Perl source-code, the first thing that happens is that it is translated into an intermediate form ... basically, a data-structure.   A very similar thing happens, sometimes on-the-fly, when you use a regular expression.   This is the phase called “compile time,” and indeed it is, even though the result is not “stand-alone executable machine instructions.”

Then, as your program runs, what’s actually happening is that highly optimized code within “Perl itself” is iterating over that data-structure and doing what it says to do.   This is “run time.”

It used to be the case that compilers always generated pure machine-code output, and of course “C” compilers (and so forth) still can, but at the time when this was the de facto choice, machines were much smaller and slower and simply did not give you as many feasible choices to work with.   (This approach also limits what the resulting programs can do.)   It can now be shown that Perl’s “hybrid” approach is consistently faster, and certainly much more compact, in many real-world situations.   The flexibility that it gives by “blurring the once-bright line” between compile-time and run-time is compelling, too.   Almost every language tool today is implemented in this way.