每当我看到源过滤器一词时,我都会想知道它是指什么。
除了正式的定义之外,我认为一个例子也有助于将信息带回家。
答案 0 :(得分:19)
源过滤器是一个在评估之前修改其他代码的模块。因此,执行的代码不是程序员在编写时看到的代码。您可以在perldoc perlfilter
阅读有关源过滤器(在Perl上下文中)的更多信息。一些示例是Smart::Comments
,它允许程序员在代码中的注释中保留调试命令,并且只在需要时使用它们,另一个是PDL::NiceSlice
,它是用于切片PDL对象的糖。
编辑:
有关使用的更多信息(如果您想要勇敢面对野兽),请阅读Filter::Simple
的文档,这是创建过滤器的典型方法。
另外,有一种新的,不同的方法来处理源代码:Devel::Declare
允许您与Perl自己的解析器进行交互,让您可以执行许多与源过滤器相同类型的事情,但没有源代码过滤。这在某些方面可能“更安全”,但其范围更为有限。
答案 1 :(得分:7)
源过滤器是一种模块形式,它会影响文件use
的解析方式。它们通常用于模拟Perl本身没有的语法特性 - 例如,Switch
源过滤器通常用于在Perl的given { }
构造可用之前模拟switch语句。
源过滤器的工作方式是将模块文本作为输入,对其执行一些处理,然后输出过滤后的源代码。有关如何实现源过滤器的简单示例以及更多详细信息,请参阅perlfilter的perldoc页面。
答案 2 :(得分:4)
它们是预处理器。他们在到达Perl编译器之前更改源代码。你可以用它们做可怕的事情,实际上是实现你自己的语言,它具有可读性(对于其他人)的所有效果,健壮性(编写解析器很难)和可维护性(当你对源代码是什么的想法时调试变得棘手与编译器和运行时认为的不同。