Что такое фильтр-источник?

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

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

Ответ 1

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

Edit:

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

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

Ответ 2

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

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

Ответ 3

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