2010-07-21 43 views
6

的意義是什麼,什麼是這樣的(我認爲這是面向對象的)效果:「使用模塊」之後代碼塊的含義是什麼?

use My::Confusing::Code 
{ 
    CITY => { MODIFY  => 1,   
       DEFAULT  => My::Even::more::complicated->func(), 
      }, 
    STATE => { MODIFY  => 1,   
       DEFAULT  => 'Concatenate()', 
      }, 
    COUNTRY => { MODIFY  => 1, 
       REQUIRED  => 0, 
       DEFAULT  => 'Gabon', 
       }, 
} 

什麼將我的::混亂::代碼封裝/模塊/類做的東西在大括號中。花括號是否包含代碼塊或散列引用?

+0

應該有一個;在最後}之後,至少如果在文件中還有其他代碼。 – ysth 2010-07-21 15:33:08

回答

13

這是一個散列引用。

當你做use Module::Foo @stuff;,發生了什麼幕後的是:

BEGIN { 
    require "Module/Foo.pm"; 
    Module::Foo->import(@stuff); 
}; 

通常情況下,傳遞給import的參數來問的符號被導出到您的命名空間。 (執行此操作的典型方法是使用標準Exporter模塊中的import子例程。)但是在這種情況下,模塊作者編寫了一個自定義的import方法,該方法使用hashref並對其執行任何操作。

+2

模塊實現「導入」方法有很多其他原因。 – mob 2010-07-21 16:12:55

+0

謝謝。是的,在這種情況下,「導入」函數使用傳遞給它的散列引用來初始化它自己的一組符號表中的條目,以供使用它的模塊使用。這段代碼實現了perl的排序框架。 – paz9 2010-07-22 18:24:27

相關問題