Предварительное объявление функций

Я неоднократно обращал внимание на то, что многие черты Perl 6 очень напоминают механизмы, свойственные C++. Сегодня — речь о предварительном объявлении функций.

Рассмотрим простую программу, состоящую всего-навсего из двух функций: main() и func():

Выполнение начинается с функции main(), из которой вызывается func(), которая в свою очередь выводит на печать свое имя. Аналогичная программа, записанная в стиле Perl 5, будет иметь такой вид:

Эта программа продолжает работать и в том случае, если определение функции func() поместить после ее вызова:

А что произойдет, если поменять местами определения функций main() и func() в программе на Perl 6?

Выполнение этой программы приводит к ошибке. Например, в текущей реализации (для Windows) компилятор сообщает об остановке в модуле Util.pm:

Died at d:/parrot/languages/perl6/P6C/Util.pm line 72.

Чтобы избавиться от ошибки и в то же время поместить определение основной функции main() первой, нужно добавить объявление функции func() перед ее вызовом