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.