]>
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__ | |
5dda6db3 | 36 | ahqr enaql gjng pbpx t-fcbg |
37 | anxrq encr grng pbzrvat t\f+fcbg | |
38 | avccyr erne guebng pbzvat tebva | |
39 | bcravat fangpu gvg pebgpu ubbgre | |
40 | beny fchax gvggl penc ubeal | |
41 | betl fcrez gvggvr penpx ubyr | |
42 | betnfz fcuvapgre hgrehf pernz uhzc | |
43 | certanag fghq ihyin phag unaqwbo | |
44 | cevpx fgnss intvan phz urnq | |
45 | chff fhpx ivetva phzzvat wvfz | |
46 | chffl fjnyybj ivoengbe pnzr xabo | |
47 | chffvrf fperj jbzo preivk xvff | |
48 | chovp frk jrg pureel ybir | |
49 | chqraqhz frkhny juber pyvg ybire | |
5e2a9814 | 50 | chzc frrq kkk pyvgbevf ybirq |
5dda6db3 | 51 | cnagvrf frzra nany pyvggl ybnq |
52 | crargengr funsg nerbyn pyvznk ynovn | |
53 | crargengrq funt nff qevyyrq ynvq | |
54 | cravf funttvat nffubyr qrsybjre yrfovna | |
55 | crgre fuvg obbo qvpx yvcf | |
56 | crpxre fvrt\furvy oernfg qvyqb znfgheong | |
57 | cunyyhf fyhg ohgg rebgvp znfgheongr | |
58 | cvff fyhggvfu ohggbpx rerpgvba znfgheongvat | |
59 | ebfrohq fyvg onyy rkcbfrq znzznel | |
60 | ebq gbathr ovgpu shpx znzznevrf | |
61 | ehg gbby oybj snpvny |