2009-07-21 8 views

Respuesta

30

La función use:

use ModuleName; 

es equivalente al siguiente código utilizando la función require:

BEGIN { 
    require ModuleName; 
    ModuleName->import; 
} 

El bloque BEGIN hace que este código para funcionar tan pronto como el analizador ve. El require carga el módulo o lo intenta die. Y luego se llama a la función import del módulo. La función import puede hacer todo tipo de cosas, pero es común que cargue funciones en el espacio de nombres que use d it (a menudo con el módulo Exporter).

Es importante señalar que la importación no serán llamados en este caso:

use ModuleName(); 

En ese caso, es equivalente a

BEGIN { 
    require ModuleName; 
} 
+1

La página de manual dice que es * exactamente * equivalente :) – Inshallah

+1

@Inshalla Me gusta dejar un poco de margen de maniobra para mi memoria defectuosa. –

3

use se ejecuta en tiempo de compilación, y require se ejecuta en tiempo de ejecución.

+3

No olvides la llamada de 'import'. –

+2

Esta es la respuesta que están buscando en las pruebas de Perl y entrevistas de trabajo. ¡Necesitas memorizar esto! – Hawk

10

Perl viene con gran documentación. Todos se beneficiarían al leer toda la documentación al menos una vez cada pocos meses.

C:\>perldoc -f require

De lo contrario require demandas que un archivo Biblioteca Sé incluido si aún no lo ha sido incluido. El archivo se incluye a través del mecanismo do-FILE , que es esencialmente solo una variedad de eval con la advertencia de que las variables léxicas en la secuencia de comandos de invocación serán invisibles para el código incluido. tiene una semántica similar a la siguiente subrutina :

... etc.Del mismo modo,

C:\>perldoc -f use

importa aproximadamente la semántica en el paquete actual desde el módulo llamado, en general por aliasing cierta subrutina o nombres de variables en su paquete . Es exactamente equivalente a

BEGIN { require Module; Module->import(LIST); } 

excepto que el Módulo debe ser una palabra clave.

... etc

También existe la perlfaq entry aunque creo que es menos informativo que lo anterior.

+1

Además del maravilloso comando 'perldoc', puede acceder a toda la misma documentación a través de http://perldoc.perl.org –

+0

Ah. Sus etiquetas kbd hacen que sea más difícil decir qué es un enlace (además de mostrar no muy bien). – ysth

Cuestiones relacionadas