Filter::Simple is based on Filter:Util::Call, but simplifies the
means by which you can begin doing your own source filtering with
Perl. Filter::Simple ships with the Perl 5.8 source kit.
Using Filter::Simple is, well, easy. Basically, Filter::Simple
implements FILTER { ... }, which you can use to
handle many of your simple source-filtering needs.
Let's say that you want a good glass of ale, and you
decide that you don't want Perl to
print, but pint instead. You
can implement something like the following with Filter::Simple.
First, create a module called Print_to_Pint:
package Print_to_Pint;
use Filter::Simple;
FILTER { s/pint/print/g; }
# true
1;
Now, use Print_to_Pint to do something with pint:
#!/usr/local/bin/perl -w
use Print_to_Pint;
my $bottles = 99;
my $last = 1;
foreach my $bottle (reverse($last .. $bottles)) {
pint "$bottle -> burp\n";
}
By default, Filter::Simple ignores no behavior,
i.e., it stops filtering after a no Module is
encountered. You can alter this behavior by passing another argument
to use Filter::Simple or to FILTER { ...
}. For example:
package Print_to_Pint;
use Filter::Simple;
FILTER {
s/pint/print/g;
}
"";
Filter::Simple also supports FILTER_ONLY, which
allows you to support multiple filters to handle different parts of
your source code. FILTER_ONLY takes several
subroutines as options: code,
executable, string,
regex, quotelike, and
all. code or
executable filters all Perl code, except Pod or
_ _DATA_ _ types. quotelike
filters other Perl quotelike stuff, including here documents.
string filters all string-related parts.
regex filters all pattern-literal parts of
quotelike.
For example, the following module will skip all incidences of Pod in
the PodSucks module:
package PodSucks;
use Filter::Simple;
FILTER_ONLY
executable => sub { s/x/X/g },
executable => sub { print }
# True. True.
1;
The above code might not make that much sense, but take a look at the
test program now, and it should become clear:
#!/usr/local/bin/perl -w
use PodSucks;
print "Flocks of Red Sox cause shocks to the Bronx.\n";
=pod
You will fear the wrath of Pod! Fear my wrath!
=cut
This prints:
Flocks of Red SoX cause shocks to the BronX.
 |  |  |
8.112. FileHandle |  | 8.114. Filter::Util::Call |