2011-08-09 61 views
14

每当我看到术语源过滤器我仍然在想它是指什么。什么是源过滤器?

除了一个正式的定义,我认为一个例子也会有助于将信息带回家。

+0

@mu太短:说实话,我不知道这是否是Perl特有的或不是 – Zaid

回答

19

源过滤器是在评估之前修改其他一些代码的模块。因此,执行的代码不是程序员在写入时看到的内容。您可以在perldoc perlfilter上阅读有关源过滤器的更多信息(在Perl上下文中)。一些示例是Smart::Comments,它允许程序员在代码的注释中留下调试命令,并且只在需要时使用它们;另一个是PDL::NiceSlice,这是用于切分PDL对象的糖。

编辑:

有关使用情况(如果您希望勇敢的野兽)的更多信息,请阅读文档Filter::Simple这是一个典型的方法来创建过滤器。

另外还有一种新的,不同的方式来处理源代码:Devel::Declare可让您与Perl自己的解析器进行交互,让您可以执行许多与源过滤器相同的类型,但不需要源过滤器。这在某些方面可能更“安全”,但其范围更加有限。

+0

我不知道它在'perldoc'! – Zaid

+1

不是'perldoc'太棒了! –

+0

这是(只要你知道你的方式) – Zaid

7

A 源代码过滤器是一种模块形式,它影响文件被解析的方式。它们通常用于模拟Perl本身没有的语法特征 - 例如,Switch源过滤器通常用于在Perl的given { }构造可用之前模拟开关语句。

源代码过滤器的工作方式是将模块的文本作为输入,对其执行一些处理,并输出过滤后的源代码。有关如何实现源过滤器的简单示例以及更多详细信息,请参阅perlfilter的perldoc页面。

4

它们是预处理器。他们在到达Perl编译器之前更改源代码。你可以用它们做一些可怕的事情,实际上是实现你自己的语言,它具有所有可读性(对于其他语言),健壮性(编写解析器很难)和可维护性(当你对源代码是什么不同于编译器和运行时认为的)。