# VOODOO LINE-NOISE my($C,$M,$P,$N,$S);END{print"1..$C\n$M";print"\nfailed: $N\n"if$N} sub ok{$C++; $M.= ($_[0]||!@_)?"ok $C\n":($N++,"not ok $C (". ((caller 1)[1]||(caller 0)[1]).":".((caller 1)[2]||(caller 0)[2]).")\n")} sub try{$P=qr/^$_[0]$/}sub fail{ok($S=$_[0]!~$P,$_[0])} sub pass{ok($S=$_[0]=~$P,$_[0])} # LOAD use Regexp::Common; ok; # MAKE THEM PROFANE tr/A-Za-z/N-ZA-Mn-za-m/ foreach (@profanity, @contextual); # TEST UNEQUIVOCABLE PROFANITIES try $RE{profanity}; pass $_ foreach @profanity; fail $_ foreach @contextual; fail $_ foreach @non_profanity; # TEST CONTEXTUAL PROFANITIES try $RE{profanity}{contextual}; pass $_ foreach @profanity; pass $_ foreach @contextual; fail $_ foreach @non_profanity; BEGIN { @non_profanity = ( 'love', 'peace', 'joy', 'honour', 'valour', 'house', 'street', 'parse', 'scrape', 'mishit', 'rectum', 'anus', 'clitoris', 'vagina', 'breast', 'nipple', 'penis', 'scrotum', 'foreskin', ); } BEGIN { @profanity = ( 'oybj-wbo', 'oybj-wbof', 'pbpxfhpxvat', 'pbpx-fhpxre', 'pbpx-fhpxref', 'pbpx-fhpxvat', 'phag', 'phagf', 'srygpu', 'srygpuvat', 'srygpure', 'srygpuref', 'srygpurf', 'srygpurq', 'zbgure-shpxre', 'zbgure-shpxref', 'zbgure-shpxvat', 'zhgure-shpxre', 'zhgure-shpxref', 'zhgure-shpxvat', 'zhgun-shpxre', 'zhgun-shpxref', 'zhgun-shpxvat', 'zhgun-shpxn', 'zhgun-shpxn', 'zhgun-shpxn', 'shpx', 'shpxf', 'shpxvat', 'shpxrq', 'ohyy-fuvg', 'ohyy-fuvgf', 'ohyy-fuvggvat', 'ohyy-fuvggrq', 'ohyy-fuvggre', 'ohyy-fuvggref', 'uneq-ba', 'fuvg', 'fuvgf', 'fuvggvat', 'fuvggrq', 'fuvggre', 'fuvggref', 'fuvggl', 'fuvgr', 'fuvgrf', 'fuvgvat', 'fuvgrq', 'fuvgre', 'fuvgref', 'fuvgrl', 'gjng', 'gjngf', 'gheq', 'gheqf', 'phzf', 'phzvat', 'phzzvat', 'penc', 'pencf', 'penccre', 'penccref', 'penccvat', 'penccrq', 'penccl', 'nff-ubyr', 'nff-ubyrf', 'nffvat', 'nffrq', 'unys-nffrq', 'nefr', 'nefrf', 'nefr-ubyr', 'nefvat', 'nefrq', 'unys-nefrq', 'sneg', 'snegf', 'snegre', 'snegvat', 'snegrq', 'snegl', 'cvff', 'cvffrf', 'cvffre', 'cvffref', 'cvffvat', 'cvffrq', 'cvffl', 'cvff-gnxr', 'zreqr', 'zreq', 'dhvz', 'dhvzf', 'qvpx-urnq', 'qvpxyrff', 'qvpxvat', 'qvpxrq', 'qvpxf', 'jnax', 'jnaxf', 'jnaxre', 'jnaxref', 'jnaxvat', 'jnaxrq', 'oybj wbo', 'oybj wbof', 'pbpx fhpxre', 'pbpx fhpxref', 'pbpx fhpxvat', 'zbgure shpxre', 'zbgure shpxref', 'zbgure shpxvat', 'zhgure shpxre', 'zhgure shpxref', 'zhgure shpxvat', 'zhgun shpxre', 'zhgun shpxref', 'zhgun shpxvat', 'zhgun shpxn', 'zhgun shpxn', 'zhgun shpxn', 'ohyy fuvg', 'ohyy fuvgf', 'ohyy fuvggvat', 'ohyy fuvggrq', 'ohyy fuvggre', 'ohyy fuvggref', 'uneq ba', 'nff ubyr', 'nff ubyrf', 'unys nffrq', 'nefr ubyr', 'unys nefrq', 'cvff gnxr', 'qvpx urnq', 'oybjwbo', 'oybjwbof', 'pbpxfhpxre', 'pbpxfhpxref', 'pbpxfhpxvat', 'zbgureshpxre', 'zbgureshpxref', 'zbgureshpxvat', 'zhgureshpxre', 'zhgureshpxref', 'zhgureshpxvat', 'zhgunshpxre', 'zhgunshpxref', 'zhgunshpxvat', 'zhgunshpxn', 'zhgunshpxn', 'zhgunshpxn', 'ohyyfuvg', 'ohyyfuvgf', 'ohyyfuvggvat', 'ohyyfuvggrq', 'ohyyfuvggre', 'ohyyfuvggref', 'uneqba', 'nffubyr', 'nffubyrf', 'unysnffrq', 'nefrubyr', 'unysnefrq', 'cvffgnxr', 'qvpxurnq' ); @contextual = ( 'onyy', 'onyyf', 'onyyvat', 'onyyrq', 'onyyre', 'onyyref', 'onfgneq', 'oybbql', 'obar', 'obarf', 'obavat', 'obare', 'obaref', 'ohttre', 'pbpx', 'pbpxf', 'qvpx', 'qbat', 'qbatf', 'uhzc', 'uhzcre', 'uhzcref', 'uhzcf', 'uhzcvat', 'uhzcrq', 'cevpx', 'cevpxf', 'cebax', 'cbex', 'chffl', 'chffvrf', 'ebbg', 'ebbgf', 'ebbgre', 'ebbgref', 'ebbgvat', 'ebbgrq', 'fperj', 'fperjf', 'fperjvat', 'fperjrq', 'funt', 'funtf', 'funttvat', 'funttrq', 'funttre', 'funttref', 'fbq', 'fbqf', 'fbqqvat', 'fbqqrq', 'fchax', 'gvg', 'gvgf' ); }