Strange. I have just tested the original script with samples. All works. Understand nothing )
P.S. Seems that I am very tired because I have put Movie and movie in replace pl script :)
So it must be 
my %REPLACE=(
    
    "Movie"          				 => $MOVIE ,
 ) ;
And in this case it will be one missing categorie - movie.
This sample works with your script. Thanks. Seems somewhere my error.
Update:
Your script works well. Thanks again. But I have investigated a problem that
it works only for english letters if there are chinese, russian, greek and so on letters
it doesn't work and must be modified with these strings:
use utf8 ;
use Encode ;
foreach my $key (keys %REPLACE) {
    $REPLACE{lc($key)} = $REPLACE{$key}  ;
}
while (<>) {
    my $line = $_ ;
    $line = decode_utf8($line);
    $line =~ s/($PRE)(.*)($POST)/"$1".myfilter(lc("$2"))."$3"/ge ;
    $line = encode_utf8($line);
    print $line;
}