+#!/usr/bin/perl
+# Censor filter.
+# Copyright 2002 by Joey Hess under the terms of the GNU GPL.
+
+# Yes, this program is self-modifying code, if you want it to be.
+if (exists $ENV{ADD_WORD}) {
+ open(IN, $0) || die "cannot read myself";
+ @lines=<IN>;
+ close IN;
+ open OUT, ">$0" || die "cannot write myself";
+ for (@lines) {
+ print OUT $_;
+ if (/^__DATA__\n$/) {
+ open(DATAOUT, "|sort|uniq|column >> $0");
+ $ENV{ADD_WORD} =~ y/n-za-m/a-z/;
+ print DATAOUT "$ENV{ADD_WORD}\n";
+ print DATAOUT join("\n",
+ map { chomp; split ' ', $_ } <DATA>);
+ close DATAOUT;
+ exit;
+ }
+ }
+}
+
+$censored = join("|", reverse sort { $a cmp $b }
+ grep { length $_ }
+ map { chomp; y/a-z/n-za-m/; split ' ', $_ } <DATA>);
+
+while (<>) {
+ s/\b($censored)ed/CENSORED/ig; # don't say "CENSOREDed"
+ s/\b($censored)/CENSORED/ig;
+ print $_;
+}
+
+__DATA__
+ahqr enaql grng pbzrvat t\f+fcbg
+anxrq encr guebng pbzvat tebva
+avccyr erne gvg pebgpu ubbgre
+bcravat fangpu gvggl penc ubeal
+beny fchax gvggvr penpx ubyr
+betl fcrez hgrehf pernz uhzc
+betnfz fcuvapgre ihyin phag unaqwbo
+certanag fghq intvan phz urnq
+cevpx fgnss ivetva phzzvat wvfz
+chff fhpx ivoengbe pnzr xabo
+chffl fjnyybj jbzo preivk xvff
+chffvrf fperj jrg pureel ybir
+chovp frk juber pyvg ybire
+chqraqhz frkhny kkk pyvgbehf ybirq
+chzc frrq nany pyvggl ybnq
+cnagvrf frzra nerbyn pyvznk ynovn
+crargengr funsg nff qevyyrq ynvq
+crargengrq funt nffubyr qrsybjre yrfovna
+cravf funttvat obbo qvpx yvcf
+crgre fuvg oernfg qvyqb znfgheong
+crpxre fyhg ohgg rebgvp znfgheongr
+cunyyhf fyhggvfu ohggbpx rerpgvba znfgheongvat
+cvff fyvg onyy rkcbfrq znzznel
+ebfrohq gbathr ovgpu shpx znzznevrf
+ebq gbby oybj snpvny
+ehg gjng pbpx t-fcbg