Perl - это интерпретируемый язык *1001*, что означает, что и фаза компиляции, и фаза запуска происходят последовательно каждый раз, когда вы пытаетесь запустить скрипт.
Скомпилированные языки с другой стороны (C, Pascal и т. Д.) Разделяют эти две фазы и обычно имеют промежуточную фазу, называемую linking , которая объединяет объект файлы и библиотеки в окончательный исполняемый файл .
В скомпилированных языках обнаружение неопределенной функции может происходить либо в фазе компиляции , либо в фазе , связывающей , в зависимости от строгости языковой спецификации. В оригинальном C вызов компоновщика найдет неопределенную функцию, но в C ++ он будет найден компилятором.
Что еще более усложняет ситуацию, некоторые языки, такие как Java, имеют отдельные фазы компиляции и выполнения, но компиляция на самом деле представляет собой промежуточный «байт-код», который затем интерпретируется системой времени выполнения (т.е. виртуальная машина Java).
Строго говоря, Perl также использует промежуточный байт-код, но разделение фаз в большинстве случаев невидимо.