Почему оператор use выполняется первым в блоке BEGIN? - PullRequest
5 голосов
/ 11 мая 2011

Когда я выполняю следующий код, я получаю Can't locate SomePackage.pm in @INC ....

BEGIN {
    die;
    use SomePackage;
}

Почему use выполняется до die?

Ответы [ 2 ]

9 голосов
/ 11 мая 2011

use SomePackage в точности эквивалентно

BEGIN { require SomePackage; SomePackage->import }

Кодовый блок BEGIN выполняется как можно скорее, то есть в тот момент, когда он полностью определен . Второй BEGIN (что подразумевается use) полностью определяется первым и, таким образом, выполняется первым.

1 голос
/ 11 мая 2011

С http://perldoc.perl.org/functions/use.html

Поскольку использование вступает в силу при компиляции время, это не уважает обычное управление потоком кода скомпилирован.

...