Вы не получили ответа в течение целого дня, потому что ваш код беспорядок как по форме, так и по содержанию, и вы даже не удосужились сделать сокращенный контрольный пример из всей вашей программы. MvanGeest также дал неверный диагноз в комментарии к вопросу.
Проблема в том, что люди, написавшие CMS Брейтбарта, не имеют ни малейшего понятия, они вставляют NCR —
(это непечатаемый символ и, возможно, даже недопустимый символ), когда им нужно было просто вставить символ —
(U+2014 EM DASH
); в конце концов, кодировка документа объявляется UTF-8. (Хорошо видно, что кодировкой должна была быть Windows-1252, где расположена кодовая точка 151 (десятичная).)
Вы можете обойти некомпетентность с их стороны с помощью явного шага декодирования / кодирования.
use Encode qw(encode decode);
⋮
my $string_representation = $dom_tree->as_HTML('<>&', ' ', {});
my $octets = encode('UTF-8', decode('Windows-1252', $string_representation);
⋮
# send the correct Content-Type header in your CGI program before printing the HTTP body
print $octets;