Por que não posso chamar sub definido posteriormente no bloco BEGIN, mesmo com a declaração de encaminhamento?

Isso funciona:

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

Isso produz um erro:

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

Erro:

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

Isso faz sentido, já que estamos no meio da fase de compilação ao executar o sub ... então o compilador ainda não chegou à sub declaração / definição.

... MAS:Adicionar uma declaração direta (antes do bloco BEGIN ou dentro dele) não ajuda:

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

Por que a declaração de encaminhamento não funciona quando a função é chamada no bloco BEGIN? Eu assumiria que isso ocorre durante a fase de compilação, a maneira comomy declaração faz.

perldoc perlsub parece não lançar nenhuma luz.

questionAnswers(1)

yourAnswerToTheQuestion