为什么'use'语句首先在BEGIN块中执行?

时间:2011-05-11 12:18:33

标签: perl compile-time

当我执行以下代码时,我得到Can't locate SomePackage.pm in @INC ...

BEGIN {
    die;
    use SomePackage;
}

为什么在use之前执行die

2 个答案:

答案 0 :(得分:9)

use SomePackage完全等同于

BEGIN { require SomePackage; SomePackage->import }

BEGIN代码块会尽快执行,也就是完全定义的那一刻。第二个BEGIN(由use暗示)首先完全定义,因此首先执行。

答案 1 :(得分:1)

来自http://perldoc.perl.org/functions/use.html

  

因为use在编译时生效   时间,它不尊重平凡   代码的流量控制正在进行   编译。