]>
Commit | Line | Data |
---|---|---|
e99ec255 | 1 | #!/usr/bin/perl |
2 | # Censor filter. | |
3 | # Copyright 2002 by Joey Hess under the terms of the GNU GPL. | |
4 | ||
5 | # Yes, this program is self-modifying code, if you want it to be. | |
6 | if (exists $ENV{ADD_WORD}) { | |
7 | open(IN, $0) || die "cannot read myself"; | |
8 | @lines=<IN>; | |
9 | close IN; | |
10 | open OUT, ">$0" || die "cannot write myself"; | |
11 | for (@lines) { | |
12 | print OUT $_; | |
13 | if (/^__DATA__\n$/) { | |
14 | open(DATAOUT, "|sort|uniq|column >> $0"); | |
15 | $ENV{ADD_WORD} =~ y/n-za-m/a-z/; | |
16 | print DATAOUT "$ENV{ADD_WORD}\n"; | |
17 | print DATAOUT join("\n", | |
18 | map { chomp; split ' ', $_ } <DATA>); | |
19 | close DATAOUT; | |
20 | exit; | |
21 | } | |
22 | } | |
23 | } | |
24 | ||
25 | $censored = join("|", reverse sort { $a cmp $b } | |
26 | grep { length $_ } | |
27 | map { chomp; y/a-z/n-za-m/; split ' ', $_ } <DATA>); | |
28 | ||
29 | while (<>) { | |
30 | s/\b($censored)ed/CENSORED/ig; # don't say "CENSOREDed" | |
31 | s/\b($censored)/CENSORED/ig; | |
32 | print $_; | |
33 | } | |
34 | ||
35 | __DATA__ | |
36 | ahqr enaql grng pbzrvat t\f+fcbg | |
37 | anxrq encr guebng pbzvat tebva | |
38 | avccyr erne gvg pebgpu ubbgre | |
39 | bcravat fangpu gvggl penc ubeal | |
40 | beny fchax gvggvr penpx ubyr | |
41 | betl fcrez hgrehf pernz uhzc | |
42 | betnfz fcuvapgre ihyin phag unaqwbo | |
43 | certanag fghq intvan phz urnq | |
44 | cevpx fgnss ivetva phzzvat wvfz | |
45 | chff fhpx ivoengbe pnzr xabo | |
46 | chffl fjnyybj jbzo preivk xvff | |
47 | chffvrf fperj jrg pureel ybir | |
48 | chovp frk juber pyvg ybire | |
49 | chqraqhz frkhny kkk pyvgbehf ybirq | |
50 | chzc frrq nany pyvggl ybnq | |
51 | cnagvrf frzra nerbyn pyvznk ynovn | |
52 | crargengr funsg nff qevyyrq ynvq | |
53 | crargengrq funt nffubyr qrsybjre yrfovna | |
54 | cravf funttvat obbo qvpx yvcf | |
55 | crgre fuvg oernfg qvyqb znfgheong | |
56 | crpxre fyhg ohgg rebgvp znfgheongr | |
57 | cunyyhf fyhggvfu ohggbpx rerpgvba znfgheongvat | |
58 | cvff fyvg onyy rkcbfrq znzznel | |
59 | ebfrohq gbathr ovgpu shpx znzznevrf | |
60 | ebq gbby oybj snpvny | |
61 | ehg gjng pbpx t-fcbg |