The vast majority of source filters depend on Filter::Util::Call to setup the source filtering for them. It includes Call.xs which makes the calls to filter_add() and filter_read().
In the same distribution is Filter::Util::exec, which does things fairly differently than Filter::Util::Call. However, I don't see many (any?) people using it — it has 0 reverse dependencies on MetaCPAN.
A few source-filtering modules don't go through Filter::Util::Call, but instead have their own .xs file that make the calls to filter_add() and filter_read():
Filter::decrypt — a template for writing your own decrypt source filter, which several others copied from, such as:
And then there's a few that do source filtering completely differently.
Acme::Bleach — reads the current script into a string, munges it, and runs eval() on it
open 0 followed by <0> are apparently all that's need to read in the current source file
INABA Hitoshi's numerous source filters — these all read the current script, munge the string, write it out to another script, and then exec()s the new file
note to self: you can find these calls in a module's source by doing this: pcre2grep -I -rs '\bparse_(?:stmtseq|fullstmt|barestmt|block|label|(?:full|list|term|arith)expr)\b' .