in reply to is use strict a compile time directive?

davorg already nailed it, but I would like to point out that the above item is checked at compile time. Try it
use strict; print "This is executed at run-time\n"; $undeclared_var = "this will be caught";
This is important because it allows typos to be caught even if they are along execution paths your program didn't take in testing. (Catch errors early and all that.)

In fact the strict vars, and strict subs checks are both compile time. But checking refs is a run-time issue, and propagation to eval is also a run-time issue. So the compile-time declaration has some run-time and some compile time effects.

If you want a fuller explanation of how strict.pm works, you can try Re (tilly) 1: How does strict work?.