The same goes for languages like C, but the difference is that in perl you can define symbols at compilation time as a result of running other code, e.g.:
$ perl -wE 'BEGIN { eval "sub spew { say \@_ }" if time % 2 == 0 } spew "hello"'
hello
$ perl -wE 'BEGIN { eval "sub spew { say \@_ }" if time % 2 == 0 } spew "hello"'
Unquoted string "spew" may clash with future reserved word at -e line 1.
Here the program can be syntactically correct or incorrect depending
on the compilation time.