perl source-filter

perl - ¿Qué es exactamente un filtro de origen?



source-filter (3)

Ellos son preprocesadores. Cambian el código fuente antes de que llegue al compilador de Perl. Puede hacer cosas aterradoras con ellos, implementando su propio lenguaje, con todos los efectos que esto tiene sobre la legibilidad (para otros), la solidez (los analizadores de escritura son difíciles) y la mantenibilidad (la depuración se complica cuando su idea de cuál es el código fuente difiere de lo que creen el compilador y el tiempo de ejecución).

Cada vez que veo el término filtro fuente, me pregunto a qué se refiere.

Además de una definición formal, creo que un ejemplo también sería útil para llevar el mensaje a casa.


Un filtro de origen es una forma de módulo que afecta la forma en que se analizará el archivo que lo use . Se usan comúnmente para simular características sintácticas que Perl no posee de forma nativa; por ejemplo, el filtro de fuente Switch se usó a menudo para simular instrucciones de cambio antes de que la construcción given { } Perl estuviera disponible.

Los filtros de origen funcionan tomando el texto del módulo como entrada, realizando algún procesamiento en él y generando el código fuente filtrado. Para obtener un ejemplo simple de cómo se implementa un filtro fuente, así como más detalles, consulte la página perldoc para perlfilter .


Un filtro de fuente es un módulo que modifica algún otro código antes de ser evaluado. Por lo tanto, el código que se ejecuta no es lo que ve el programador cuando se escribe. Puede leer más sobre los filtros fuente (en el contexto de Perl) en perldoc perlfilter . Algunos ejemplos son Smart::Comments que le permite al programador dejar los comandos de depuración en comentarios en el código y emplearlos solo si así lo desea; otro es PDL::NiceSlice que es azúcar para cortar objetos PDL.

Editar:

Para obtener más información sobre el uso (si desea desafiar a la bestia), lea la documentación de Filter::Simple que es una forma típica de crear filtros.

Alternativamente, hay una nueva y diferente manera de rebuscar con la fuente: Devel::Declare te permite interactuar con el propio analizador de Perl, permitiéndote hacer muchas cosas del mismo tipo que un filtro fuente, pero sin el filtro fuente. Esto puede ser "más seguro" en algún aspecto, pero tiene un alcance más limitado.