1#!/usr/local/bin/perl 2 3$row = "!qwertyuiop!asdfghjkl!zxcvbnm!"; 4@row_array = split(//, $row); 5 6while (<>) { 7 chomp; 8 y/A-Z/a-z/; 9 s/\byou\b/u/gi; 10 s/\bpeople\b/ppl/gi; 11 s/\bthrough\b/thru/gi; 12 s/\bthough\b/tho/gi; 13 s/\bnope\b/nup/gi; 14 s/\baustralia\b/oz/gi; 15 s/\bfilm\b/flim/gi; 16 s/\bsucks\b/sux/gi; 17 s/\benough\b/enuff/gi; 18 s/\ba lot\b/a shitload/gi; 19 s/\bstuff\b/shit/gi; 20 s/, /.. /g; 21 s/\.$/.../g; 22 23 @lets = split(//); 24 25 $strlen = $#lets; 26 27 for ($x = 0; $x < $strlen; $x++) { 28 if (rand() < 0.01) { 29 swap(\@lets, $x, $x + 1); 30 next; 31 } 32 33 if (rand() < 0.10 && $lets[$x] eq " ") { 34 swap(\@lets, $x - 1, $x - 2); 35 next; 36 } 37 38 if(rand() < 0.01) { 39 $i = insert_adjacent(\@lets, $x, $lets[$x]); 40 $strlen += $i; 41 next; 42 } 43 44 if(rand() < 0.01) { 45 splice(@lets, $x, 1); 46 $strlen--; 47 next; 48 } 49 } 50 51 print join("", @lets) . "\n"; 52} 53 54sub insert_adjacent { 55 my($aref, $pos, $let) = @_; 56 57 58 $newlet = get_adjacent($let); 59 60 if( !$newlet ) { 61 return 0; 62 } 63 64 splice(@$aref, $pos + 1, 0, $newlet); 65 return 1; 66} 67 68 69sub get_adjacent { 70 my($let) = @_; 71 72 return 0 if $let !~ /[a-zA-Z]/; 73 74 $i = index($row, $let); 75 $before = $row_array[$i - 1]; 76 $after = $row_array[$i + 1]; 77 78 79 80 if( $before eq "!" || (rand() < rand() && $after ne "!")) { 81 return $after; 82 } else { 83 return $before; 84 } 85} 86 87sub swap { 88 my($aref, $n, $m) = @_; 89 my($tmp); 90 91 if(defined($$aref[$n]) && defined($$aref[$m])) { 92 if(! (($$aref[$n] =~ /[A-Z ]/ && $$aref[$m] =~ /[A-Z ]/) || 93 ($$aref[$n] =~ /[a-z ]/ && $$aref[$m] =~ /[a-z ]/) )) { 94 return; 95 } 96 $tmp = $$aref[$n]; 97 $$aref[$n] = $$aref[$m]; 98 $$aref[$m] = $tmp; 99 } 100} 101 102