Почему я не могу вызвать определенный позже 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
кажется, не пролить свет.