in reply to Compilation vs Interpretation

When I'm running my script, when is the compile time, and run time?
Compile time is first, run time is last*. In between, it switches. In fact, it switches from compile time to run time after it finished compiling a "unit" (file, BEGIN block, eval string). It switches to from run time to compile time when encountering something that needs compiling (require (if not already compiled), do, eval string, s///e), or, after running a compiled unit, there's more to compile.
Perl is an interpreted language
Maybe, depending on your definition of "interpreted". It's not interpreted in the sense a shell script is. It is interpreted if one considers anything that separates compiling into a different process to be interpreted.

1Ok, when there's a syntax error, compile time may be the last step.2
2But not always. Some syntax errors can trigger __WARN__ or __DIE__ handlers.