Почему я не могу вызвать определенный позже sub в блоке BEGIN даже с предварительным объявлением?

Это работает:

use strict;
X("xxxxxx");
sub X { print shift;}

Это приводит к ошибке:

use strict;
BEGIN {
    X("xxxxxx");
}
sub X { print shift;}

Ошибка:

Undefined subroutine &main::X called at ./test.pl line 5.

Это имеет смысл, так как при выполнении подпрограммы мы находимся в середине фазы компиляции, поэтому компилятор еще не дошел до объявления / определения подпрограммы.

... НО:Добавление предварительного объявления (перед блоком BEGIN или внутри него) не помогает:

use strict;
sub X;
BEGIN {
    X("xxxxxx");
}
sub X { print shift;}

Почему предварительное объявление не работает, когда функция вызывается в блоке BEGIN? Я хотел бы предположить, что это происходит на этапе компиляции, способmy декларация делает.

perldoc perlsub кажется, не пролить свет.

Ответы на вопрос(1)

Ваш ответ на вопрос