2010-07-21 5 views
6

¿Cuál es el significado y cuál es el efecto de algo como esto (creo que está orientado objeto):¿Cuál es el significado de un bloque de código después de un "módulo de uso"?

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

¿Qué la Mi :: :: Código paquete/módulo/clase confuso con la materia en las llaves. ¿Las llaves incluyen un bloque de código o una referencia hash?

+0

Debe haber una; después del último}, al menos si hay algún otro código en el archivo. – ysth

Respuesta

13

Es una referencia hash.

Al hacer use Module::Foo @stuff;, lo que está sucediendo detrás de las escenas es:

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

Normalmente, los parámetros pasados ​​a import se utilizan para pedir símbolos para ser exportados en su espacio de nombres. (La forma típica de hacerlo es usar la subrutina import del módulo estándar Exporter). Pero en este caso, el autor del módulo ha escrito un método personalizado import que toma un hashref y hace cosas con él.

+2

Existen muchas otras razones para que un módulo implemente un método de 'importación'. – mob

+0

Gracias. Sí, la función de "importación" en este caso utiliza la referencia de hash que se le ha pasado para inicializar una entrada en su propio conjunto de tablas de símbolos para los módulos que lo utilizan. Este código implementa un tipo de marco perl. – paz9

Cuestiones relacionadas