2011-05-11 55 views
5

当我执行下面的代码时,我得到了Can't locate SomePackage.pm in @INC ...为什么在BEGIN块中首先执行'use'语句?

BEGIN { 
    die; 
    use SomePackage; 
} 

为什么usedie之前执行?

+1

不太确定,但在编译时评估使用,并在运行时死亡。 – Toto 2011-05-11 12:33:11

+0

@ M42那么'BEGIN'块也会在编译时进行评估。 – 2011-05-13 08:51:56

回答

9

use SomePackage是完全等同于

BEGIN { require SomePackage; SomePackage->import } 

BEGIN码块被尽快执行的,即,它是此刻完全确定。第二个BEGIN(其暗示为use)首先被完全定义,并且因此首先被执行。

+0

适用于Perl arcana的+1。哎哟。 – Axeman 2011-05-11 12:38:10

相关问题