perlmod explica esos bloques especiales, pero de hecho sólo se BEGIN
y END
se utilizan comúnmente. Son solo matrices de CV, LIFO o FIFO. Esos bloques permiten sincronizaciones separadas cuando se ejecuta código, independientemente de la ubicación en el archivo de origen. De modo que puede mantener las secciones de código juntas, pero se ejecutan en momentos diferentes (PHASES
).
COMPROBACIÓN se añadió inicialmente para ejecutar la suite compilador O (-MO=C...
) en un orden fijo después de módulo de inicialización (paquete de uso), y antes de que el programa principal, para ser capaz de almacenar el contexto de ejecución allí. Esto separa el tiempo de compilación (antes) del tiempo de ejecución (después). perl -c
se detiene después de CHECK.
Como soy el mantenedor de los compiladores, utilizo CHECK y -MO = extensivamente. Mis métodos de módulos compile()
son llamados por O dentro de un bloque CHECK. Con Od (depuración O) Llamo al método compile
no en CHECK, pero más tarde en INIT, por lo que el depurador entra en él. El depurador no entra en los bloques CHECK por defecto, tiene que forzarlo con $DB::single=1
o usar Od.
UNITCHECK se agregó más tarde a la compilación y carga de módulos de grano fino, esp. .pmc
archivos.
Nunca lo he usado hasta ahora. También puede suceder en tiempo de ejecución, por lo que podría usarlo para verificaciones de tipos de módulos cargados en tiempo de ejecución.
INIT se agregó para permitir la inicialización de clases separadas.
Raramente uso eso, pero es útil.
Ahora recuerdo por qué no quería hacer 'require Module; Module-> import (@stuff)'. Fue porque ya tenía un conjunto de scripts de prueba que quería poder depurar, y no quería editar la declaración 'use Module' en cada archivo. – mob
No necesita pasar por esas contorsiones para depurar el código de tiempo de compilación. Simplemente coloque $ DB :: single = 1 en cualquier lugar de su fuente y el depurador se detendrá en ese punto, sin importar en qué fase del procesamiento esté el programa. (Vea http://perldoc.perl.org/perldebug.html#Debugging -compile-time-statements) –
Gracias Brian! Es bueno saberlo. – mob