Что именно является исходным фильтром? - PullRequest
14 голосов
/ 09 августа 2011

Всякий раз, когда я вижу термин фильтр источника , я не могу понять, к чему он относится.

Помимо формального определения, я думаю, что пример также будет полезен длясообщение домой.

Ответы [ 3 ]

19 голосов
/ 09 августа 2011

Исходный фильтр - это модуль, который изменяет некоторый другой код перед его оценкой. Поэтому исполняемый код - это не то, что видит программист при его написании. Вы можете прочитать больше о исходных фильтрах (в контексте Perl) по адресу perldoc perlfilter. Некоторые примеры это Smart::Comments, который позволяет программисту оставлять команды отладки в комментариях в коде и использовать их только при желании, другой - PDL::NiceSlice, который является сахаром для нарезки объектов PDL .

Edit:

Для получения дополнительной информации об использовании (если вы хотите отважиться на зверя) прочитайте документацию для Filter::Simple, которая является типичным способом создания фильтров.

В качестве альтернативы, существует новый и другой способ обойти источник: Devel::Declare позволяет вам взаимодействовать с собственным анализатором Perl, позволяя вам делать многие вещи того же типа, что и фильтр источника, но без фильтра источника. В некотором отношении это может быть «безопаснее», но имеет более ограниченную область применения.

7 голосов
/ 09 августа 2011

A исходный фильтр - это форма модуля, которая влияет на способ анализа файла use. Они обычно используются для имитации синтаксических функций, которых у Perl изначально нет - например, фильтр источника Switch часто использовался для имитации операторов переключения до того, как была доступна конструкция Perl given { }.

Исходные фильтры работают, принимая текст модуля в качестве входных данных, выполняя некоторую обработку и выводя отфильтрованный исходный код. Простой пример того, как реализован исходный фильтр, а также дополнительные сведения см. На странице perldoc для perlfilter .

4 голосов
/ 09 августа 2011

Это препроцессоры. Они изменяют исходный код до того, как он достигнет компилятора Perl. Вы можете делать с ними страшные вещи, фактически реализуя свой собственный язык, со всеми эффектами, которые это оказывает на удобочитаемость (для других), надежность (написание синтаксических анализаторов трудно) и удобство сопровождения (отладка становится сложной, когда вы представляете исходный код отличается от того, что думают компилятор и среда выполнения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...