use 5.016;
use utf8;
use encoding "utf8";

my @blacklist = (
   'суика', 'шлюика', 'кна?иве?с', 'гнид(ану)?с',
);

my %t = (
   а => 'аa',  б => 'б6',  в => 'вb',  г => 'гr',
   д => 'д',   е => 'еeё', ж => 'ж',   з => 'з3',
   и => 'ий',  к => 'кk',  л => 'л',   м => 'мm',
   н => 'нh',  о => 'оo0', п => 'п',   р => 'рp',
   с => 'сc',  т => 'тt',  у => 'уy',  ф => 'ф',
   х => 'хx',  ц => 'ц',   ч => 'ч4',  ш => 'шщw',
   э => 'э',   ю => 'ю',   я => 'я9',  ь => 'ьъы6b',
);

s/(.)/(exists $t{$1} ? "(?:[$t{$1}][\\s\\p{punct}]*)" : $1)/ge for @blacklist;

for my $t (map { chomp; utf8::decode($_); $_ } <>) {
   $t =~ s/[^\p{ascii}\p{cyrillic}]/!/gi;
   print $t;
   for my $r (@blacklist) {
      print "  !!!" if($t =~ m/$r/xi);
   }
   print "\n";
}