2010-07-21 17 views
6

Jakie jest znaczenie i to, co jest efektem czegoś takiego (myślę, że to jest zorientowane obiektowo):Co oznacza blok kodu po "module użytkowania"?

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', 
       }, 
} 

co by My :: Mylące :: Kod pakietu/moduł/klasa zrobić z rzeczy w nawiasy klamrowe. Czy nawiasy klamrowe zawierają blok kodu lub odwołanie do skrótu?

+0

Powinno być; po ostatnim}, przynajmniej jeśli w pliku znajduje się kolejny kod. – ysth

Odpowiedz

13

To skrót hash.

Kiedy robisz use Module::Foo @stuff;, co dzieje się za kulisami jest:

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

Normalnie parametry przekazywane do import są wykorzystywane, aby poprosić o symbole mają być eksportowane do swojej przestrzeni nazw. (Typowym sposobem na to jest użycie podprogramu import ze standardowego modułu Exporter.) W tym przypadku autor modułu napisał niestandardową metodę import, która pobiera hashref i robi z nim rzeczy.

+2

Istnieje wiele innych powodów, dla których moduł implementuje metodę 'import'. – mob

+0

Dzięki. Tak, funkcja "import" w tym przypadku używa przekazanej do niej wartości skrótu do zainicjowania wpisu w swoim własnym zestawie tablic symboli dla modułów, które go używają. Ten kod implementuje rodzaje ramek perla. – paz9