2011-05-11 56 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

相關問題